Python中变量的赋值 - 奇怪的行为

时间:2012-05-07 11:25:09

标签: python variables variable-assignment

我目前正在用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

我必须害怕吗?因为我是 ! ; - )

2 个答案:

答案 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