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

您可能会发现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您正在考虑金钱。显然,浮点是错误的类型。

于 2012-05-12T03:32:23.860 回答
0

这是计算机常见的浮点问题。它与计算机如何存储浮点数有关。我建议快速阅读一下每个计算机科学家应该了解的关于浮点运算的知识。

于 2012-05-12T03:33:45.933 回答