Мне интересно, какая удобная функция в Rails для преобразования строки с отрицательным знаком в число. например -1005.32
Когда я использую метод .to_f
, число становится 1005
, при этом отрицательный знак и десятичная часть игнорируются.
Мне интересно, какая удобная функция в Rails для преобразования строки с отрицательным знаком в число. например -1005.32
Когда я использую метод .to_f
, число становится 1005
, при этом отрицательный знак и десятичная часть игнорируются.
.to_f
- правильный путь.
Пример:
irb(main):001:0> "-10".to_f
=> -10.0
irb(main):002:0> "-10.33".to_f
=> -10.33
Может быть, ваша строка не содержит регулярную "-" (тире)? Или есть пробел между тире и первой цифрой?
Добавлено:
Если вы знаете, что ваша строка ввода представляет собой строчную версию плавающего числа, например "10.2", то .to_f - лучший/самый простой способ сделать преобразование.
Если вы не уверены в содержимом строки, то использование .to_f
даст 0 в случае, когда у вас нет чисел в строке. Он также даст различные другие значения в зависимости от вашей входной строки. Например,
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
Приведенное поведение .to_f
может быть именно тем, что вы хотите, это зависит от вашего проблемного случая.
В зависимости от того, что вы хотите делать в различных случаях ошибок, вы можете использовать Kernel::Float
, как предполагает Марк Рушаков, поскольку он вызывает ошибку, когда он не очень доволен преобразованием входной строки.
Вы должны использовать Kernel::Float
для преобразования числа; на недопустимый вход, это приведет к ошибке вместо того, чтобы просто "пытаться" ее преобразовать.
>> "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