こんにちは私は私のプロジェクトでfloat値を比較する必要があります私は次のコードを使用しています
if style_score.style_quiz_score ==float(17.40):
しかし、これでは機能しませんが、値を17.40から17に変更すると、正常に機能します。フロート値を比較する方法を教えてください。
こんにちは私は私のプロジェクトでfloat値を比較する必要があります私は次のコードを使用しています
if style_score.style_quiz_score ==float(17.40):
しかし、これでは機能しませんが、値を17.40から17に変更すると、正常に機能します。フロート値を比較する方法を教えてください。
これは、丸め誤差が原因です。float を と比較しないでください==
。常に次のテンプレートを使用してください。
def floats_are_the_same(a,b): return abs(a-b) < 1e-6
if floats_are_the_same(value, 17.4):
....
つまり、値が目的の値に近いことを確認します。これは、float 演算にはほとんどの場合、丸め誤差があるためです。
>>> 17.1 + 0.3
17.400000000000002
python (または浮動小数点数の基礎となるハードウェア表現に依存する任意の言語) での浮動小数点数の比較は、常にトリッキーな作業になります。これを行う最善の方法は、2 つの数値が等しいと見なされる許容範囲 (たとえば10^-6
) を定義し、数値間の絶対差が許容範囲よりも小さいかどうかを確認することです。
コード:
TOLERANCE=10**-6
def are_floats_equal(a,b):
return abs(a-b) <= TOLERANCE
PS: 浮動小数点数を使用した正確な任意精度の計算が本当に必要な場合は、 decimal モジュールを使用してください。ちなみに、そのページには、通常のフロートの失敗ポイントの良い例がいくつかあります. ただし、これは通常のフロートを使用するよりも非常に遅いので、本当に必要でない限りこれを行わないでください。