0

Float オブジェクトで数学を行っている場合があり、to_i を呼び出すと 1 減ります。

value = 0.29 * 100
value.to_i
=> 28

浮動小数点数が不正確な表現であることは知っていますが、これは予想以上にずれています。どうすればこれを防ぐことができますか?

Ruby 1.8.7 を使用しています (1.8.6 でも発生します)。

4

2 に答える 2

6
(0.29 * 100).round
 => 29 

すべての浮動小数点数が不正確というわけではありません。29正確0.25です、正確ですが、0.29そうではありません。小数点以下 50 ビットが 1 ビットでも欠けている場合、デフォルトの切り捨て変換では、次に小さい整数が返されます。

#roundそしてそれが存在する理由です。

于 2011-12-06T18:03:19.350 に答える
3

0.29 * 100irb で簡単に確認すると、 が に評価されることがわかり28.999...ます。Float#to_i残りは呼び出して、最終的に 28 になります。

于 2011-12-06T17:58:51.117 に答える