在数学中,1/3 的值是 0.333(3 到无穷大(。
但是,Python在尾部打印出错误的数字。
print(f"{1/3:.100f}".rstrip("0"));
print(f"{1/3:.100f}");
结果:
0.3333333333333333314829616256247390992939472198486328125
结果(无 rstrip(:
0.333333333333333333148296162562473909929394721984863281250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000那些尾部数字(不是 3(来自哪里?
来自文档
浮点数在计算机硬件中表示为基数 2(二进制(分数
对于不能表示为二进制分数的小数(例如重复小数(,它们由二进制分数近似,直至精度限制:
停在任何有限位数的位处,你就会得到一个近似值。在今天的大多数机器上,浮点数是使用二进制分数近似的,分子使用前 53 位 [...]
因此,1/3.
不是存储为0.333....
(重复(,而是存储为近似值(表面上是 53 位二进制分数(。
当你添加更精确的值时,python 会计算一个更接近实际值的数字。这样想一想,用1/3:
0.3
或
0.33
或
0.333
"无论你愿意写下多少位数,结果永远不会是1/3,而是越来越接近1/3。