【发布时间】:2009-04-23 18:32:14
【问题描述】:
我正在编写处理货币、费用等的代码。我打算使用 BigDecimal 类进行数学和存储,但我们遇到了一些奇怪的问题。
此声明:
1876.8 == BigDecimal('1876.8')
返回 false。
如果我通过格式化字符串 "%.13f" 运行这些值,我会得到:
"%.20f" % 1876.8 => 1876.8000000000000
"%.20f" % BigDecimal('1876.8') => 1876.8000000000002
请注意 BigDecimal 中最后一个小数位的额外 2。
我认为 BigDecimal 应该能够解决将实数直接存储在计算机的本机浮点中的不准确性问题。这是哪里来的2?
【问题讨论】:
标签: ruby floating-point bigdecimal