Python中十进制相乘时的精度损失

2024-04-19 08:28:39 发布

您现在位置:Python中文网/ 问答频道 /正文

当我试图在python中乘法两个十进制对象时,我遇到了精度损失。我该怎么解决这个问题?在

    u = Decimal("1.4142135623730950488016887242096980785696718753769480731766797379907324784621070388503875343276415727350138462309122970249248360558507372126441214970999358314132")
   y = Decimal(10**100)
   z = u*y
   str(int(z))
=> '14142135623730950488016887240000000000000000000000000000000000000000000000000000000000000000000000000'

Tags: 对象精度intdecimal损失乘法str
2条回答

与基于硬件的二进制浮点不同,十进制模块有一个用户可更改的精度(默认为28位),它可以根据给定问题的需要而变大

您可以通过调用decimal.getcontext().prec = 256(或任何其他适合您用途的值)来更改它

Decimal不是像int那样的任意精度,而是具有固定但可变的精度小数位数。默认情况下是28,这正好是你的号码断开的地方。在

您可以通过执行decimal.getcontext().prec=128或任何需要的精度来更改此值。有关更多信息,请参阅documentation。在

相关问题 更多 >