我有一个字符串,我想将其转换为小数 例如
tax_rate = "0.07"
tax_rate.to_d
在大多数情况下,它会转换为0.07
,但有时会将其转换为0.07000000000000001
。为什么呢?
如果有帮助,当我查看将此值插入数据库时的日志,这是相关部分:
["tax_rate", #<BigDecimal:7f9b6221d7c0,'0.7000000000 000001E-1',18(45)>]
希望这对某人有意义。
声明:
我有一种感觉,有人会问为什么我这样做。
我创建了一个简单的设置模型,用户可以在其中更新一些全局设置
Setting
模型包含name
,value
和var_type
列
value
列是一个字符串。我使用辅助方法以适当的格式检索值,具体取决于var_type
列的值。
答案 0 :(得分:1)
我无法解释为什么但我有机会告诉你如何避免在处理数字时遇到这种麻烦:使用理性。
以下是文档:http://ruby-doc.org/core-1.9.3/Rational.html
如上所述,理性总会给出您想要的确切数字,从而避免舍入错误。
来自doc:
10.times.inject(0){|t,| t + 0.1} #=> 0.9999999999999999
10.times.inject(0){|t,| t + Rational('0.1')} #=> (1/1)
如果这可以解决您的问题,请告诉我。 :)