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

ruby-on-rails – Ruby BigDecimal Round:这是一个错误吗?

发布时间:2020-12-16 19:09:13 所属栏目:百科 来源:网络整理
导读:在编写一个带有表示为BigDecimal的值的测试时,我遇到了一些奇怪的东西并决定深入研究它.简而言之,当舍入到两位小数时,’0.00009’将返回0.01而不是0.00.真.这是我的脚本/控制台捕获: bp = BigDecimal('0.09')= #BigDecimal:210fe08,'0.9E-1',4(8) bp.round(
在编写一个带有表示为BigDecimal的值的测试时,我遇到了一些奇怪的东西并决定深入研究它.简而言之,当舍入到两位小数时,’0.00009’将返回0.01而不是0.00.真.这是我的脚本/控制台捕获:
>> bp = BigDecimal('0.09')
=> #<BigDecimal:210fe08,'0.9E-1',4(8)>
>> bp.round(2,BigDecimal::ROUND_HALF_DOWN).to_f
=> 0.09
>> bp = BigDecimal('0.009')
=> #<BigDecimal:210bcf4,'0.9E-2',BigDecimal::ROUND_HALF_DOWN).to_f
=> 0.01
>> bp = BigDecimal('0.0009')
=> #<BigDecimal:2107a8c,'0.9E-3',4(12)>
>> bp.round(2,BigDecimal::ROUND_HALF_DOWN).to_f
=> 0.0
>> bp = BigDecimal('0.00009')
=> #<BigDecimal:2103428,'0.9E-4',BigDecimal::ROUND_HALF_DOWN).to_f
=> 0.01
>> bp = BigDecimal('0.000009')
=> #<BigDecimal:20ff0f8,'0.9E-5',BigDecimal::ROUND_HALF_DOWN).to_f
=> 0.0

哦,如果我使用默认模式,我会得到相同的结果,如下所示:

>> bd = BigDecimal('0.00009')
=> #<BigDecimal:2152ed8,4(12)>
>> bd.round(2).to_f
=> 0.01

这是我的版本:

ruby 1.8.6 (2008-03-03 patchlevel 114) [i686-darwin9.2.2]
Rails 2.3.4

有没有人见过这样的东西?

解决方法

不,之前从未见过,这看起来确实像个错误.舍入到小数点后两位的0.00009肯定应为0.00.

由于您没有处理中点值,因此ROUND_HALF_DOWN不应更改行为.

This link有更多细节.

它似乎是1.8级中的一个错误,已在1.9中修复.这有点奇怪,因为它似乎只影响在第一个非零数字之前具有偶数个零的数字,并且仅在该数字为5或更大时.

根据提供的数据,这似乎是您的问题.

(编辑:李大同)

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

    推荐文章
      热点阅读