1

当我运行某些报告时,我看到了非常非常奇怪的行为:

>> 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_sBigDecimal 的表示看起来是一致的。与q和相同q.to_s。但是,p-q字符串是否表示为“0.1244...”,但在格式化为“10244.98...”时出现

当我运行它时,number_to_currency它实际上显示了错误的数字(12,449.88 美元)而不是预期的数字,但仅在我的 RHEL 4 Box 上。

4

2 回答 2

1

查看版本后,我似乎在 RHEL 机器上运行 Ruby 1.8.5,在本地机器上运行 Ruby 1.8.6。我认为这会解决问题?确实是奇怪的问题。

更新:已确认 - 升级到 1.8.6 解决了这些问题。

于 2009-07-21T19:26:16.220 回答
0
>> 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"

在我手工编译的 ruby​​ 1.8.7/OSX 上

听起来他们可能在两者之间修复了库中的错误 - 但仅速度改进可能就是升级的充分理由(如果你坚持维护无法升级的应用程序,我会感觉到你)

对于您为什么尝试将 0.1024498764E5 显示为货币,我有点困惑。

于 2009-07-21T19:50:34.140 回答