3

我对 Python 比较陌生,通过阅读文档网站上的教程页面,我发现了这个片段:在此处输入图像描述 这让我很好奇,所以我决定将它输入 Python 文件并进行测试。但是,当我这样做时,它给了我不同的结果:

   .1+.1+.1 == .3
=> True

这个问题可能看起来微不足道,但我很好奇为什么实际行为与 Python 文档所说的不匹配。有什么答案吗?

使用在线解释器时会出现此行为。在本地运行它返回 False。

4

2 回答 2

2

你从来没有说过你正在运行哪个版本的 Python,这会产生巨大的影响。该算法很可能是基于 IEEE 的双精度数,它应该在系统之间保持一致。然而,CPython 基于底层 C 库,这些库在输入浮点常量时可能会有所不同。其他版本的 Python 也将依赖于一些底层平台。

编辑:确认。使用问题中给出的在线解释器,我得到:

   '%0.20f' % (.1+.1+.1,)
=> '0.30000000000000004441'
   '%0.20f' % (.3,)
=> '0.30000000000000004441'

在 Windows 上使用 Python 2.7:

>>> '%0.20f' % (.1+.1+.1,)
'0.30000000000000004441'
>>> '%0.20f' % (.3,)
'0.29999999999999998890'

看起来在线解释器以不同的方式对输入进行四舍五入。

于 2013-04-19T15:58:59.127 回答
1

第一条评论就是答案。在我的系统上:

Python 2.7.3 (default, Sep 26 2012, 21:53:58) 
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 0.1+0.1+0.1 == 0.3
False
>>>

来自 python 文档(http://docs.python.org/2/tutorial/floatingpoint.html):

二进制浮点运算有很多这样的惊喜。“0.1”的问题将在下面的“表示错误”</a>部分中详细解释 。有关其他常见意外的更完整说明,请参阅浮点的危险。

于 2013-04-19T15:35:04.307 回答