我试着把非常大的整数转换成小数,然后把这些小数转换成分数,再把分数转换回小数。我使用分数和小数包来避免浮点不精确,但是精度仍然很快下降。有什么方法可以解决这个问题/其他方法吗?
import fractions
import decimal
def convert(exampleInt):
power_of_10 = len(str(exampleInt))
decimal.getcontext().prec = 10000
exampleDecimal = decimal.Decimal(exampleInt) / (decimal.Decimal(10) ** power_of_10)
exampleFraction = fractions.Fraction(str(exampleDecimal)).limit_denominator()
backToDecimal = exampleFraction.numerator / decimal.Decimal(exampleFraction.denominator)
print(f"backToDecimal: {backToDecimal}")
convert(34163457536856478543908582348965743529867234957893246783427568734742390675934285342)
其输出:.341634575369123189552597490138153768602695082851231192155069838....
1条答案
按热度按时间nkhmeac61#
这是因为调用了
limit_denominator()
,而且使用中间字符串转换效率很低。使用如下构造函数将
Decimal
对象转换为Fraction
对象(这是Mark Dickinson的解决方案)。