首页 > 解决方案 > Python值中的这些尾随数字来自哪里?

问题描述

在数学中,值 1/3 是 0.333(3 到无穷大)。

但是,Python 在尾部打印出错误的数字。

print(f"{1/3:.100f}".rstrip("0"));
print(f"{1/3:.100f}");

结果:

0.333333333333333314829616256247390992939472198486328125

结果(没有 rstrip):

0.33333333333333331482961625624739099293947219848632812500000000000000000000000000000000000000000000000

那些尾随数字(不是 3)来自哪里?

标签: pythonfloating-pointlimitnumericsignificant-digits

解决方案


文档

浮点数在计算机硬件中表示为以 2 为底的(二进制)分数

对于不能表示为二进制分数的十进制分数(例如重复小数),它们由二进制分数近似,直到精度限制:

停在任何有限的位数,你会得到一个近似值。在当今的大多数机器上,浮点数使用二进制分数来近似,分子使用前 53 位 [...]

因此,1/3.不存储为0.333....(重复),而是存储为近似值(表面上是 53 位二进制小数)。


推荐阅读