Я задаюсь вопросом, что такое удобная функция в направляющих для преобразования строки со знаком минус в число. например. -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