3

BigDecimalクラスは壊れていますか?次のようなことは絶対に起こらないようです。a.to_f!=a.to_s.to_fに注意してください。

a.class => BigDecimal

a.to_f => 18658.1072928

a.to_s => "10865.81072928"

b.class => BigDecimal

b.to_f => 10000.0

b.to_s => "10000.0"

(a --b).to_f => 865.81072928

a.to_f-b.to_f => 8658.1072928

何がうまくいかないかについてのアイデアはありますか?サーバーではruby1.8.7p72を実行し、ローカルマシンでは1.8.7p173を実行しています。

4

2 に答える 2

1

Mac OS X 10.6.3を実行している場合、これは説明である可能性があります:http ://www.abletech.co.nz/2010/03/osx-10-6-3-installs-new-ruby-with-障害-bigdecimal/

問題を取り除くために、RVMを使用することができます。

于 2010-04-02T20:01:35.903 に答える
0

ドキュメントが言うように:

to_f

BigDecimal数値とほぼ同じ値を持つ新しいFloatオブジェクトを返します。通常の精度制限とバイナリ浮動小数点演算の組み込みエラーが適用されます。

つまり、ルビーのフロートはどこでもフロートのように動作します:http: //en.wikipedia.org/wiki/Floating_point#Accuracy_problems

すべての数値がFloatで表現できるわけではありません。このような場合、数値は四捨五入されます。

于 2010-04-01T22:33:19.423 に答える