首页 > 解决方案 > 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/1001/10

为什么它会这样?我猜这与这些数字在计算机上的存储方式有关。我也尝试过 Python 中的 Fractions 库,但这给出了相同的结果。我希望有人可以向我解释为什么它会这样。

标签: pythonintegerbase

解决方案


正如colidyre 所提到的,问题在于浮点表示的不准确性。您可以使用分数库中的limit_denominator 方法来获得正确的结果。

>>> from fractions import Fraction
>>> Fraction(0.01).limit_denominator(100000)
1/100

推荐阅读