当尝试在 python 中乘以两个小数对象时,我遇到了精度损失。我该如何解决这个问题?
u = Decimal("1.4142135623730950488016887242096980785696718753769480731766797379907324784621070388503875343276415727350138462309122970249248360558507372126441214970999358314132")
y = Decimal(10**100)
z = u*y
str(int(z))
=> '14142135623730950488016887240000000000000000000000000000000000000000000000000000000000000000000000000'
请您参考如下方法:
Decimal 不是像 int 那样的任意精度,而是具有固定但可变的精度小数位数。默认情况下,这是 28,这恰好是您的号码在此刻中断的位置。
您可以通过执行 decimal.getcontext().prec=128 或您需要的任何精度来更改它。有关更多信息,请参阅 documentation .
