направляющие преобразовывают строку в число

Я задаюсь вопросом, что такое удобная функция в направляющих для преобразования строки со знаком минус в число. например. -1005.32

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

51
задан user664833 26 May 2014 в 07:51
поделиться

2 ответа

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

73
ответ дан 7 November 2019 в 10:06
поделиться

Для преобразования числа следует использовать 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
26
ответ дан 7 November 2019 в 10:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: