ruby – 为什么BigDecimal返回一个奇怪的值?

前端之家收集整理的这篇文章主要介绍了ruby – 为什么BigDecimal返回一个奇怪的值?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在编写将处理货币,费用等的代码.我将使用BigDecimal类用于数学和存储,但是我们遇到了一些奇怪的事情.

这个说法:

1876.8 == BigDecimal('1876.8')

返回false.

如果我通过格式化字符串“%.13f”运行这些值,我得到:

"%.20f" % 1876.8 => 1876.8000000000000
"%.20f" % BigDecimal('1876.8') => 1876.8000000000002

注意从最后一个小数位的BigDecimal的额外的2.

我认为BigDecimal应该是将计算机的本机浮点直接存入实际数字的不正确性.这2来自哪里?

解决方法

你是对的,BigDecimal应该正确存储,我最好的猜测是:

> BigDecimal正确存储该值
>当传递给字符串格式化函数时,BigDecimal被转换为较低精度的浮点值,创建… 02.
>当直接与浮点数进行比较时,浮点数有一个额外的小数位,远远超过了你所看到的20(经典的浮点数不能比较behavoir).

无论哪种方式,您都不太可能获得比较浮点数与BigDecimal的准确结果.

猜你在找的Ruby相关文章