рельсы преобразовать строку в число - PullRequest
49 голосов
/ 06 мая 2010

Мне интересно, какова удобная функция в Rails для преобразования строки с отрицательным знаком в число. например -1005.32

Когда я использую метод .to_f, число становится 1005 с игнорированием знака минуса и десятичной части.

Ответы [ 2 ]

73 голосов
/ 06 мая 2010

.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, как предлагает Марк Рушаков, поскольку он вызывает ошибку, когда не совсем доволен преобразованием входной строки.

25 голосов
/ 06 мая 2010

Вы должны использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...