python - Python:为什么 0.01.as_integer_ratio() 返回 5764607523034235/576460752303423488
问题描述
当我注意到一些我不理解的东西时,我正在用 Python 处理 Project Euler 的问题33 。
问题的答案需要以最低通用术语给出的分母。所以我想我会用float.as_integer_ratio()
来检查分母是什么。事实证明,0.01.as_integer_ratio()
返回(5764607523034235, 576460752303423488)
和0.1.as_integer_ratio()
返回(3602879701896397, 36028797018963968)
而不是预期的1/100
和1/10
。
为什么它会这样?我猜这与这些数字在计算机上的存储方式有关。我也尝试过 Python 中的 Fractions 库,但这给出了相同的结果。我希望有人可以向我解释为什么它会这样。
解决方案
正如colidyre 所提到的,问题在于浮点表示的不准确性。您可以使用分数库中的limit_denominator 方法来获得正确的结果。
>>> from fractions import Fraction
>>> Fraction(0.01).limit_denominator(100000)
1/100
推荐阅读
- java - 如何为适配器引用的每个绘制对象创建一个新画布?
- javascript - 谷歌地图信息框图像弹出到另一个带有图像库的信息框
- r - 在分组箱线图上放置水平线
- javascript - Reactjs Redux 使用输入更新状态/存储中的数据值
- javascript - 获取集合值的 Firestore 代码
- windows - Python 2 试图从当前用户的 appdata 文件夹中启动一个 exe
- docker - 由于 GIT Scm 轮询,Jenkins 可能会自动构建两次
- sql - Spark SQL - 查找每年一个月的最大值
- kubernetes - 调度尽可能多的 Pod 以适合集群?
- javascript - Android WebVIew,点击问题