我对Python比较陌生,通过文档网站上的tutorial page阅读,我看到了这个片段: 这让我很好奇,所以我决定把它输入一个Python文件并进行测试。然而,当我这样做时,它给了我不同的结果:
.1+.1+.1 == .3
=> True
这个问题可能看似微不足道,但我很好奇为什么实际行为与Python文档所说的不符。有什么答案吗?
使用online interpreter时出现此问题。在本地运行它返回False。
答案 0 :(得分: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'
在线翻译似乎以不同方式对输入进行舍入。
答案 1 :(得分: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 docs(http://docs.python.org/2/tutorial/floatingpoint.html):
二进制浮点运算有许多这样的惊喜。该 下面将详细解释“0.1”的问题 “Representation Error”部分。有关,请参阅The Perils of Floating Point 更完整地说明其他常见的惊喜。