Yan*_*ang 51 ruby ruby-on-rails
我想知道在Rails中将带负号的字符串转换为数字的方便函数是什么.例如-1005.32
当我使用该.to_f方法时,数字变为1005负号,小数部分被忽略.
Lar*_*y K 73
.to_f 是正确的方法.
例:
irb(main):001:0> "-10".to_f
=> -10.0
irb(main):002:0> "-10.33".to_f
=> -10.33
Run Code Online (Sandbox Code Playgroud)
也许你的字符串不包含常规的" - "(短划线)?或者破折号和第一个数字之间是否有空格?
添加:
如果您知道输入字符串是浮点数的字符串版本,例如"10.2",则.to_f是进行转换的最佳/最简单方法.
如果您不确定字符串的内容,那么.to_f在字符串中没有任何数字的情况下,using 将给出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
Run Code Online (Sandbox Code Playgroud)
上述.to_f行为可能正是您想要的,这取决于您的问题情况.
根据您在各种错误情况下的操作,您可以Kernel::Float像Mark Rushakoff所建议的那样使用,因为当它对转换输入字符串不满意时会引发错误.
Mar*_*off 26
您应该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
Run Code Online (Sandbox Code Playgroud)