我知道我可以使用: -0.5.as_integer_ratio();并得到整数分数:1/2
但是,如果我有一个小数,例如: -8.333333333333334;等效于:25/3;我使用8.333333333333334.as_integer_ratio();我得到:(4691061961859793,562949953421312)
是否有一种功能/方式可以替代“干净”的25/3?
答案 0 :(得分:5)
如果要精确表示25/3之类的分数,则首先不应该在浮点数中进行数学运算。您应该使用精确的有理类型,例如fractions.Fraction
:
from fractions import Fraction
x = Fraction(75)
y = x/9
print(y)
输出:
25/3
如果您使用浮点数或十进制字符串,可以将其转换为Fraction
,然后使用limit_denominator
查找附近带有小分母的分数。默认情况下,“小”被视为<= 1000000,但是您可以配置限制。
print(Fraction(8.333333333333334).limit_denominator())
输出:
25/3
从一开始就以有理算术处理所有事情几乎总是更好。
答案 1 :(得分:0)
您可以简单地通过导入python模块@Fraction和@Decimal来做到这一点,所以让我们看看它是如何工作的:
从十进制导入小数从十进制导入分数
Fraction(Decimal('8.33333333333334'))。limit_denominator()
注意:limit_denominator是将简化您的分数到尽可能最低的值。传递给小数的参数必须用引号引起来