今夜、Pythonで予期しない動作が発生しました。次の印刷が「等しくない」のはなぜですか?!
num = 1.00
num -= .95
nickel = .05
if nickel != num:
print 'not equal'
else:
print 'equal'
今夜、Pythonで予期しない動作が発生しました。次の印刷が「等しくない」のはなぜですか?!
num = 1.00
num -= .95
nickel = .05
if nickel != num:
print 'not equal'
else:
print 'equal'
すべてのコンピューター科学者が浮動小数点演算について知っておくべきこと。
>>> num = 1.00
>>> num
1.0
>>> num -= 0.95
>>> num
0.050000000000000044
>>> nickel = .05
>>> nickel
0.05
10進モジュールが役立つ場合があります。
>>> TWOPLACES = Decimal(10) ** -2
>>> Decimal(1).quantize(TWOPLACES)-Decimal(0.95).quantize(TWOPLACES) == Decimal(0.05).quantize(TWOPLACES)
True
または、代わりに:
import decimal
decimal.getcontext().prec = 2
decimal.Decimal(1.00) - decimal.Decimal(0.95)
変数の命名から、nickel
あなたがお金について考えていたことが推測されました。明らかに、浮動小数点はそのための間違ったタイプです。
これは、コンピューターでよく見られる浮動小数点の問題です。これは、コンピューターが浮動小数点数を格納する方法に関係しています。すべてのコンピューター科学者が浮動小数点演算について知っておくべきことを簡単に読むことをお勧めします。