2011-02-07 8 views
1

切り捨て方法が明らかに整数に浮動小数点を切り捨て切り捨てます。ここで何が起こっているのですか:フロートに

>> 14820.truncate 
=> 14820 
>> (148.2 * 100) 
=> 14820.0 
>> 14820.0.truncate 
=> 14820 
>> (148.2 * 100).truncate 
=> 14819 

なぜ最後の計算出力14820も表示されません。 truncateに関連していない

答えて

5

浮動小数点の丸めエラー、。例えば。これは

(148.2 * 100) < 14820 

それはtrueを返してみてください。 148.2が浮動小数点数で正確にを表現することができないので、比喩的に言えば、あなたは、数148.199999999代わりの148.2を取得します。

3

148.2 * 100の結果が正確に14820そうではなく、むしろによる浮動小数点エラーにその値よりわずかに小さいものです。したがって、それはあなたがこれで値を見ることができます14819.

に切り捨てになります。

>sprintf("%.19f", 148.2*100) 
=> "14819.9999999999981810106" 
0

として、これは小数点丸めエラーが浮いている、上記と述べました。私は、RubyがBUITインしているという欠点なしに、合理的な画分を表すことができ、クラスRational、追加しますので、あなたはそれを使用することをお勧めします。

0

あなたは丸め代わりの切り捨てと考えたことがありますか?