我知道我可以使用:-0.5.as_integer_ratio(); 并得到整数分数:1/2
但是,如果我有一个小数,例如:-8.333333333333334; 等效于:25/3; 我使用8.333333333333334.as_integer_ratio(); 我得到:(4691061961859793,562949953421312)
是否有功能/方法可以替代“干净”的25/3?
如果要精确表示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)
但是,从一开始就以有理算术处理一切几乎总是更好的。