BigDecimal的to_s不匹配to_f
-
23-09-2019 - |
题
时BigDecimal类破?这似乎是最好永远都不要发生以下情况: 需要注意的是a.to_f!= a.to_s.to_f
的A.class =>的BigDecimal
a.to_f => 18658.1072928
a.to_s => “10865.81072928”
b.class =>的BigDecimal
b.to_f => 10000.0
b.to_s => “10000.0”
(A - B).to_f => 865.81072928
a.to_f - b.to_f => 8658.1072928
任何想法可能什么错?我们正在运行红宝石1.8.7p72我们的服务器上,并1.8.7p173我们本地机器。
解决方案
如果您运行的是Mac OS X 10.6.3那么这可能是一个解释:的 http://www.abletech.co.nz/2010/03/osx-10-6-3-installs-new-ruby-与-故障-的BigDecimal /
要摆脱您可以使用问题的 RVM 。
其他提示
作为文档说:
<强> to_f 强>:
,则返回具有大致相同的值与BigDecimal数的新Float对象。正常精度限制和内置二进制算术浮误差适用。
这意味着,在浮红宝石行为就像到处浮法: HTTP:// EN。 wikipedia.org/wiki/Floating_point#Accuracy_problems
不是每个数字是通过浮法表示的。在这种情况下的数量为圆形。
不隶属于 StackOverflow