重複の可能性:
Python float - str - float の奇妙さ
Python では、2/5.0
または2/float(5)
戻り値0.40000000000000002
最後にそのエラーが発生するのはなぜですか? また、追加の計算で使用する正しい値を取得するにはどうすればよいですか?
重複の可能性:
Python float - str - float の奇妙さ
Python では、2/5.0
または2/float(5)
戻り値0.40000000000000002
最後にそのエラーが発生するのはなぜですか? また、追加の計算で使用する正しい値を取得するにはどうすればよいですか?
IEEE754 へようこそ、ご滞在をお楽しみください。
decimal
代わりに使用してください。
浮動小数点演算は正確ではないためです。この値を追加の計算で使用し、終了したら結果を四捨五入する必要があります。正確にする必要がある場合は、別のデータ型を使用してください。
Note that Python 3.1 has a new floating point formatting function that avoids this sort of appearance. See What's new in Python 3.1 for more details (search for "floating point").
上記のイグナシオは正しい答えを持っています。
浮動小数点数をバイナリ コンピュータに効率的に格納するための IEEE 標準があります。これらは、数値がどのように格納されているかについて非常に詳細に説明されており、これらの規則はほとんどすべてのコンピューターで守られています。
彼らも間違っています。2 進数は通常の数のほとんどを扱うことができず、2 の累乗だけです。下位ビットの再計算を必要とするトリッキーなことを行う代わりに、標準は効率を選択します。
そうすれば、わずかに高速に動作するシステムを呪うことができます。これらの問題を回避するために何らかの方法で Python を変更することについての議論が時折ありますが、その答えは簡単ではなく、効率が大幅に低下します。
これを回避する:
1 つのオプションは、標準ライブラリの「10 進数」パッケージを掘り下げることです。例に固執し、長いページを無視すると、必要なものが得られます。効率性に賭ける必要はありません。
2 つ目は、1 つの出力関数で手動の丸めと文字列の切り捨てを行うことです。それらのビットを印刷しない場合、数値が少しずれていても誰が気にしますか?
説明については、この質問を参照してください。正しい方法はどちらかです