今晚看到Python的一些意想不到的行为。为什么以下打印出“不相等”?!
num = 1.00
num -= .95
nickel = .05
if nickel != num:
print 'not equal'
else:
print 'equal'
答案 0 :(得分:6)
What every computer scientist should know about floating point arithmetic
>>> num = 1.00
>>> num
1.0
>>> num -= 0.95
>>> num
0.050000000000000044
>>> nickel = .05
>>> nickel
0.05
答案 1 :(得分:2)
您可能会发现decimal模块很有用。
>>> 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
变量的命名中推断出来。显然,浮点数是错误的类型。
答案 2 :(得分:0)
这是计算机常见的浮点问题。它与计算机如何存储浮点数有关。我建议快速阅读What Every Computer Scientist Should Know About Floating-Point Arithmetic。