0

今夜、Pythonで予期しない動作が発生しました。次の印刷が「等しくない」のはなぜですか?!

num = 1.00
num -= .95
nickel = .05

if nickel != num:
    print 'not equal'
else:
    print 'equal' 
4

3 に答える 3

6

すべてのコンピューター科学者が浮動小数点演算について知っておくべきこと

>>> num = 1.00
>>> num
1.0
>>> num -= 0.95
>>> num
0.050000000000000044
>>> nickel = .05
>>> nickel
0.05
于 2012-05-12T03:32:00.643 に答える
2

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あなたがお金について考えていたことが推測されました。明らかに、浮動小数点はそのための間違ったタイプです。

于 2012-05-12T03:32:23.860 に答える
0

これは、コンピューターでよく見られる浮動小数点の問題です。これは、コンピューターが浮動小数点数を格納する方法に関係しています。すべてのコンピューター科学者が浮動小数点演算について知っておくべきことを簡単に読むことをお勧めします。

于 2012-05-12T03:33:45.933 に答える