2012-05-12 62 views
-1

看到今晚Python的一些意外行为。为什么以下打印出“不等于”?Python浮点等于奇怪

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

if nickel != num: 
    print 'not equal' 
else: 
    print 'equal' 
+1

http://docs.python.org/tutorial/floatingpoint.html – jamylak

+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变量,你是想赚钱的命名推断。显然,浮点数是错误的类型。

+0

我不同意,这是同样的问题。 >>>小数(.05)==小数(1.00 - .95)>>> False' –

+0

所以它是......嗯...... – jgritty

+2

'小数('1') - 小数('。95') ==十进制('。05')'或'十进制(str(1.00 - .95))==十进制('。05')' – jamylak