加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 20:44:22 所属栏目:百科 来源:网络整理
导读:我正在编写将处理货币,费用等的代码.我将使用BigDecimal类用于数学和存储,但是我们遇到了一些奇怪的事情. 这个说法: 1876.8 == BigDecimal('1876.8') 返回false. 如果我通过格式化字符串“%.13f”运行这些值,我得到: "%.20f" % 1876.8 = 1876.80000000000
我正在编写将处理货币,费用等的代码.我将使用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的准确结果.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读