为什么Ruby的BigDecimal的表示数字奇怪的现象?
-
18-09-2019 - |
题
我看到,当我运行某些报告非常,非常奇怪的行为:
>> p = BigDecimal.new('0.1785990254E5')
=> #<BigDecimal:b649b978,'0.1785990254E5',16(16)>
>> q = BigDecimal.new('0.76149149E4')
=> #<BigDecimal:b64968d8,'0.76149149E4',8(16)>
>> p-q
=> #<BigDecimal:b6495ab4,'0.124498764E5',16(32)>
>> p.to_s
=> "17859.90254"
>> q.to_s
=> "7614.9149"
>> (p-q).to_s
=> "10244.98764"
如果您发现,p.to_s
和BigDecimal的表现看起来是一致的。同样的,q
和q.to_s
。然而,p-q
具有表示为字符串“0.1244 ...”,但是当为“10244.98 ...”
当我通过number_to_currency
运行这一点,实际上显示了错误的号码($ 12,449.88),而不是预期的数量,但仅限于我的RHEL 4盒。
解决方案
在看的版本后,它似乎我在我的本地机器上运行的RHEL箱的Ruby 1.8.5和Ruby 1.8.6。我想这大概占了问题?奇怪的问题确实
更新: 确认 - 升级到1.8.6解决的问题
其他提示
>> p = BigDecimal.new('0.1785990254E5')
=> #<BigDecimal:51c9e4,'0.1785990254E5',16(16)>
>> q = BigDecimal.new('0.76149149E4')
=> #<BigDecimal:518e98,'0.76149149E4',8(16)>
>> p-q
=> #<BigDecimal:516af8,'0.1024498764E5',16(32)>
>> (p-q).to_s
=> "0.1024498764E5"
在我的handcompiled红宝石1.8.7 / OSX
听起来他们可能在两者之间有固定在库中的错误 - 但仅在速度的提高可能是一个足够的理由升级(我觉得你如果你坚持维持unupgradeable应用寿)
我有点困惑,为什么你想显示0.1024498764E5货币。
不隶属于 StackOverflow