当我试图在python中乘法两个十进制对象时,我遇到了精度损失。我该怎么解决这个问题?在
u = Decimal("1.4142135623730950488016887242096980785696718753769480731766797379907324784621070388503875343276415727350138462309122970249248360558507372126441214970999358314132")
y = Decimal(10**100)
z = u*y
str(int(z))
=> '14142135623730950488016887240000000000000000000000000000000000000000000000000000000000000000000000000'
与基于硬件的二进制浮点不同,十进制模块有一个用户可更改的精度(默认为28位),它可以根据给定问题的需要而变大
您可以通过调用
decimal.getcontext().prec = 256
(或任何其他适合您用途的值)来更改它Decimal不是像
int
那样的任意精度,而是具有固定但可变的精度小数位数。默认情况下是28,这正好是你的号码断开的地方。在您可以通过执行
decimal.getcontext().prec=128
或任何需要的精度来更改此值。有关更多信息,请参阅documentation。在相关问题 更多 >
编程相关推荐