2016-10-20 7 views

答えて

3

実際の結果が28.99999999999のようなものである理由を私は理解していない28

を返します。どのPythonは表示のために29.0に丸めます。ただし、intに変換すると、小数点以下の桁が切り捨てられ、28のままになります。

なぜ、最初の結果はほとんどですが、それほどではありません。29?バイナリ浮動小数点数計算では、0.16のように10進数で「いい」数字を正確に表すことができないためです。バイナリでは、これは繰り返し終わることのない部分であり、有限メモリで正確に表現することはできません。

なぜ、正確でない場合はバイナリ浮動小数点数を使用しますか?コンピュータにはハードウェアが搭載されているため、数学は非常に高速で、ほとんどの目的で十分正確です。小数の正確な表現にはDecimal.decimalクラスを使用できますが、計算が遅くなります。

0

それは

print 25*(1+16.0/100) - 29 

を試してみて、あなたがゼロより小さい非常に非常に小さな数を取得します の問題です。

多分あなたの代わりに、または単に小数点以下を削除するのpythonの整数へのキャストint型

print int(round(25*(1+16.0/100))) 
0

の組み合わせでラウンドを使用する必要があります。丸めた整数値を取得するには、この値がまだ浮動小数点として表現され、整数にキャストされていないので、これは29.0を返します29.

return round(25.0 * (1 + 16.0/100)) 

を返します

return int(round(25.0 * (1 + 16.0/100))) 

を使用することができます。

関連する問題