我目前正在用Python做一些事情,在分配变量时我会遇到一些奇怪的行为。例如,我在ipython控制台中将“a”设置为0.1:
In [1]: a = 0.1
然后我打印一个:
In [2]: a
Out[2]: 0.10000000000000001
In [3]: a == 0.1
Out[3]: True
In [4]: a == 0.10000000000000001
Out[4]: True
好吧,也许是因为数字的有限表示(最后1位于第16位)。但那时:
In [17]: 1 == 0.10000000000000001
Out[17]: False
我必须害怕吗?因为我是 ! ; - )
答案 0 :(得分:4)
检查Python教程的Floating Point Arithmetic: Issues and Limitations部分 - 你所描述的是浮点数据类型的固有怪异(没有Python特定的)
另外,请注意repr()
(字符串表示)显示漂亮的四舍五入 - 您的第一个a
示例并不完全0.1
,如果您可以看到以更精确的方式打印它:
>>> a
0.1
>>> print "%.50f" % a
0.10000000000000000555111512312578270211815834045410
答案 1 :(得分:1)
不,你不必害怕。这是严格的非强制性的,我认为这真的是浪费精力。
只需了解这种现象(您已经认识到它)并在必要时使用Decimal
。