python - Python 中的浮点相等处理

标签 python floating-point

我对 Python 比较陌生,正在阅读 tutorial page在文档网站上,我看到了这个片段:enter image description here 这让我很好奇,所以我决定将它输入到 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/

相关文章:

性能影响长双倍。为什么C选择默认的是64位而不是硬件的80位?

python - 在不明确调用键名的情况下解析 json

python - 大文件中的字符串插入

javascript - 2的补码和IEEE754有什么关系?

c++ - 扩展精度浮点库 C/C++

c - 与 0.9 相比,为什么 >= 运算符在 C 中与 > 运算符一样工作

Delphi - 两个 "Real"数字变量的比较

Python/pip,如何从 github 安装特定版本的 git 存储库(正确的 url 是什么)?

python 测试我的方法

python - SessionNotCreatedException : Message: session not created from tab crashed in Python with Odoo, 但是 selenium 单独工作很好,