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_s、BigDecimalの表現は一貫しているように見えます。qと同じq.to_s。ただし、p-q文字列は「0.1244 ...」として表されますが、「10244.98...」としてフォーマットすると出力されます。

これを実行するnumber_to_currencyと、実際には予想された数ではなく間違った数($ 12,449.88)が表示されますが、これはRHEL4ボックスにのみ表示されます。

4

2 に答える 2

1

バージョンを確認すると、RHELボックスでRuby 1.8.5を実行しており、ローカルボックスでRuby1.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 に答える