在编写一个带有表示为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
有没有人见过这样的东西?