Tôi tự hỏi chức năng tiện lợi trong Rails là gì để chuyển đổi chuỗi có ký hiệu âm thành một số. ví dụ. -1005.32
đường ray chuyển đổi chuỗi thành số
Khi tôi sử dụng phương pháp .to_f
, số sẽ trở thành 1005
với dấu âm và phần thập phân bị bỏ qua.
Tôi tự hỏi chức năng tiện lợi trong Rails là gì để chuyển đổi chuỗi có ký hiệu âm thành một số. ví dụ. -1005.32
đường ray chuyển đổi chuỗi thành số
Khi tôi sử dụng phương pháp .to_f
, số sẽ trở thành 1005
với dấu âm và phần thập phân bị bỏ qua.
.to_f
là đúng cách.
Ví dụ:
irb(main):001:0> "-10".to_f
=> -10.0
irb(main):002:0> "-10.33".to_f
=> -10.33
Có lẽ chuỗi của bạn không bao gồm thường xuyên "-" (dấu gạch ngang)? Hoặc có một khoảng trống giữa dấu gạch ngang và chữ số đầu tiên không?
Added:
Nếu bạn biết rằng chuỗi đầu vào của bạn là một chuỗi phiên bản của một số nổi, ví dụ, "10,2", sau đó .to_f là cách tốt nhất/đơn giản nhất để làm việc chuyển đổi.
Nếu bạn không chắc chắn về nội dung của chuỗi, thì sử dụng .to_f
sẽ cung cấp 0 trong trường hợp bạn không có bất kỳ số nào trong chuỗi. Nó sẽ cung cấp cho các giá trị khác nhau tùy thuộc vào chuỗi đầu vào của bạn quá. Ví dụ:
irb(main):001:0> "".to_f
=> 0.0
irb(main):002:0> "hi!".to_f
=> 0.0
irb(main):003:0> "4 you!".to_f
=> 4.0
Hành vi trên .to_f
có thể chỉ là những gì bạn muốn, tùy thuộc vào trường hợp sự cố của bạn.
Tùy thuộc vào những gì bạn muốn làm trong các trường hợp lỗi khác nhau, bạn có thể sử dụng Kernel::Float
như Mark Rushakoff đề xuất, vì nó gây ra lỗi khi không hoàn toàn hài lòng với việc chuyển đổi chuỗi đầu vào.
Bạn nên sử dụng Kernel::Float
để chuyển đổi số; trên đầu vào không hợp lệ, điều này sẽ làm tăng lỗi thay vì chỉ "cố gắng" để chuyển đổi.
>> "10.5".to_f
=> 10.5
>> "asdf".to_f # do you *really* want a zero for this?
=> 0.0
>> Float("asdf")
ArgumentError: invalid value for Float(): "asdf"
from (irb):11:in `Float'
from (irb):11
>> Float("10.5")
=> 10.5
Một trong những điều tốt đẹp về 'Float()' trái ngược với 'Integer' là trước đây không chuyển đổi '010' thành' 8' (Integer liên quan đến một cái gì đó bắt đầu bằng '0' như bát phân) –
@AndrewGrimm Hoặc bạn chỉ có thể truyền căn cứ chính xác vào làm đối số thứ hai: 'Số nguyên (" 010 ", 10) # => 10' (Xem [Kernel # integer'] (http://ruby-doc.org/core/Kernel. html # method-i-Integer)) – Ajedi32
Bạn có lưu trữ kết quả trong phần int thay vì phao không? – Shaji