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