-2

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

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

4

2 回答 2

4

检查浮点算术: Python 教程的问题和限制部分-您所描述的是浮点数据类型固有的怪异(没有特定于 Python)

另外,请注意repr()(字符串表示)显示具有漂亮舍入的浮点数 - 您的第一个a示例不完全是0.1,如果您更精确地打印它可以看到:

>>> a
0.1
>>> print "%.50f" % a
0.10000000000000000555111512312578270211815834045410
于 2012-05-07T11:29:46.370 回答
1

不,你不必害怕。这完全是非强制性的,我认为这是浪费能源,真的。

只需了解现象(您已经认识到它)并Decimal在必要时使用。

于 2012-05-07T11:29:13.923 回答