有没有替代方法:as_integer_ratio(),以获得“更干净”的分数?

Sie*_*ers 3 python

我知道我可以使用:-0.5.as_integer_ratio(); 并得到整数分数:1/2

但是,如果我有一个小数,例如:-8.333333333333334; 等效于:25/3; 我使用8.333333333333334.as_integer_ratio(); 我得到:(4691061961859793,562949953421312)

是否有功能/方法可以替代“干净”的25/3?

use*_*ica 5

如果要精确表示25/3之类的分数,则首先不应该在浮点数中进行数学运算。您应该使用精确的有理类型,例如fractions.Fraction

from fractions import Fraction
x = Fraction(75)
y = x/9
print(y)
Run Code Online (Sandbox Code Playgroud)

输出:

25/3
Run Code Online (Sandbox Code Playgroud)

如果您使用浮点数或十进制字符串,可以将其转换为a Fraction并用于limit_denominator查找附近带有小分母的分数。默认情况下,“ small”被视为<= 1000000,但是您可以配置限制。

print(Fraction(8.333333333333334).limit_denominator())
Run Code Online (Sandbox Code Playgroud)

输出:

25/3
Run Code Online (Sandbox Code Playgroud)

但是,从一开始就以有理算术处理一切几乎总是更好的。