python中非常大的数字的舍入错误
用大量小数舍入非常大的数字会产生错误。这种小数四舍五入的限制是什么?我是Python的初学者,所以我不确定是否有其他方法可以解决这个问题python中非常大的数字的舍入错误,python,python-3.x,decimal,rounding,Python,Python 3.x,Decimal,Rounding,用大量小数舍入非常大的数字会产生错误。这种小数四舍五入的限制是什么?我是Python的初学者,所以我不确定是否有其他方法可以解决这个问题 from decimal import * print(round(Decimal((0.123456789123456789123456789123456789123)+12345678912345678912345678), 2)) 输出: 1234567892345678704279552.00 注意int上的额外数字: from decimal im
from decimal import *
print(round(Decimal((0.123456789123456789123456789123456789123)+12345678912345678912345678), 2))
输出:
1234567892345678704279552.00
注意int上的额外数字:
from decimal import *
print(round(Decimal((0.123456789123456789123456789123456789123)+123456789123456789123456789), 2))
输出:
回溯(最近一次呼叫最后一次):文件“”,第1行,在
decimal.invalidooperation:[]
与常见的误解相反,
十进制
模块不执行精确的算术运算。它执行可调精度、十进制、浮点运算
decimal
模块默认为28位小数精度。您请求的舍入操作至少需要29位精度,而不是默默地降低精度,decimal
会为此特定操作抛出一个错误
当然,您想要执行的操作的精度远高于29位,但由于您在浮点
算术中完成了一半的数学运算,而不是十进制
算术,因此在十进制
甚至可以参与之前,您就失去了大部分精度float
的精度略低于16位小数。在Decimal
调用中包装float
计算将无法完成Decimal
算术中的数学运算;您需要从十进制开始:
import decimal
decimal.getcontext().prec = 100 # enough
print(round(decimal.Decimal('0.123456789123456789123456789123456789123')+
decimal.Decimal('123456789123456789123456789'), 2))
谢谢,这解决了我的问题。事实上,我发现了另一个类似的线程。将留给未来的搜索者。它提供了一些额外的信息。