大数除法导致结果不准确

Big number division leads to unexact result

我正在测试一个处理非常大的数字 (1e17) 的 solidity 程序。

我正在测试的公式如下:int(1e17*(100-3)/(100-1))

WolframAlpha Solidity 语言告诉我它等同于 97979797979797979.

但是测试失败了,因为 Python returns 97979797979797984.

如何使用 Python 获得正确的值?

在这种情况下,fractions 模块在这里工作得很好,因为它在两个数字之间的划分是精确的,因为它保留了结果的精度。

>>> from fractions import Fraction
>>> int(Fraction(10)**17*(100-3)/(100-1))
97979797979797979
>>> 

(这里我们避免像 1e17 这样的符号,因为它可能解析为不精确的 float 值。)