python - 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)来自哪里?
解决方案
从文档
浮点数在计算机硬件中表示为以 2 为底的(二进制)分数
对于不能表示为二进制分数的十进制分数(例如重复小数),它们由二进制分数近似,直到精度限制:
停在任何有限的位数,你会得到一个近似值。在当今的大多数机器上,浮点数使用二进制分数来近似,分子使用前 53 位 [...]
因此,1/3.
不存储为0.333....
(重复),而是存储为近似值(表面上是 53 位二进制小数)。
推荐阅读
- java - 用白色图像隐藏Android Studio中的所有textView
- html - jQuery 在 tr 标题之后添加 tr
- r - 如何取消嵌套令牌并保留其他列
- testing - 如何在集成测试期间运行服务器(进程)?
- .net - 内容丰富的 .NET SDK 默认模型或获取原始条目 JSON
- flutter - 如何使用 timeago 获取正确的时间戳
- ruby-on-rails - How to deal with general errors in Rails API?
- javascript - 表行总和到 html 与 js
- java - 如何为已找到的实体加载 LAZY 关联的集合
- c# - 在 C# 中查找字符串的最后一次出现