今晚看到 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
您可能会发现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
您正在考虑金钱。显然,浮点是错误的类型。
这是计算机常见的浮点问题。它与计算机如何存储浮点数有关。我建议快速阅读一下每个计算机科学家应该了解的关于浮点运算的知识。