我对 Python 比较陌生,正在阅读 tutorial page在文档网站上,我看到了这个片段: 这让我很好奇,所以我决定将它输入到 Python 文件中并进行测试。然而,当我这样做时,它给了我一个不同的结果:
.1+.1+.1 == .3
=> True
这个问题看似微不足道,但我很好奇为什么实际行为与 Python 文档所说的不符。有答案吗?
此行为在使用 online interpreter 时发生.在本地运行它返回 False。
最佳答案
您从未说过您运行的是哪个版本的 Python,这可能会产生巨大的差异。该算法很可能是基于 IEEE 的 double ,应该在系统之间保持一致。然而,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'
在线解释器似乎以不同方式舍入输入。
关于python - Python 中的浮点相等处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16108183/