Python 舍入错误

标签 python python-2.7

我只是用 python 作为计算器,我看到了这个

Python 2.7.3 (default, Aug  1 2012, 05:14:39) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 62 * 41.2 * 2 / 250
20.435200000000002
>>> 62 * 4.12 * 2 / 25
20.4352
>>>

只是为了确保我通过 gcc 触发了以下代码,但这并没有向我展示上述行为。我知道这可能是四舍五入的东西,但它应该是统一的。为什么 python 在数学上不应该存在尾随 00000000002 的情况下加起来。

C/C++代码

#include <stdio.h>
int main () {
  printf ("%lf %lf \n", 62 * 41.2 * 2 / 250, 62 * 4.12 * 2 / 25);
}

结果

20.435200 20.435200

如果有人对他们属于某些发动机排量计算比较的特定数字感到好奇:)

最佳答案

除了@Ashwini Chaudhary 的回答,

问题:

为什么 python 在数学上不应该存在尾随 00000000002 的情况下将其加起来

答案:

因为机器中的值准确。这不是 Python 中的错误,也不是您代码中的错误。您将在所有支持二进制浮点运算的语言中看到完全相同的问题。但是,不同的语言可能会以不同的方式显示(四舍五入)。

试试这个:

0.1 + 0.2

你会得到

0.30000000000000004

这是因为 0.1 不能准确地用二进制形式表示。在基数 2 或二进制中,0.1 是无穷大的重复数

0.0001100110011001100110011001100110011001100110011...

因此,Python 决定将其四舍五入。

我建议你阅读更多 here .

关于Python 舍入错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15930381/

相关文章:

python - 导入 psycopg2 库未加载 : libssl. 1.0.0.dylib

python - 需要从 Python Flask-Appbuilder 连接到 SQL Server 的帮助

Python子进程不返回

python - 获取文本文件中的子目录列表,并在该 txt 文件中附加新的子目录名称

python - 将 python 变量附加到列表时,我得到对象值

python - 如何获取 pandas 数据帧的删除重复项索引

python - Django 的时区

python - 如何解码字节对象的字符串表示?

python-2.7 - Matplotlib 溢出错误 : Allocated too many blocks

python - 为什么 PyYAML 花费这么多时间来解析 YAML 文件?