gpt4 book ai didi

python - python 中非常大的数字的舍入错误

转载 作者:行者123 更新时间:2023-12-02 02:17:15 24 4
gpt4 key购买 nike

对带有大量小数的大数字进行四舍五入会产生错误。这种类型的小数舍入有什么限制?我是 Python 的初学者,所以我不确定是否还有其他方法可以解决这个问题。

from decimal import *
print(round(Decimal((0.123456789123456789123456789123456789123)+12345678912345678912345678), 2))

输出:

12345678912345678704279552.00

注意 int 上的额外数字:

from decimal import *
print(round(Decimal((0.123456789123456789123456789123456789123)+123456789123456789123456789), 2))

输出:

Traceback (most recent call last):
File "", line 1, in
decimal.InvalidOperation: [<class 'decimal.InvalidOperation'>]

最佳答案

与常见的误解相反,decimal 模块不执行精确的算术。它执行可调精度、小数、浮点运算。

decimal 模块默认为 28 位十进制数字精度。您请求的舍入操作需要至少 29 位精度,decimal 不会默默地给您较低的精度,而是会针对此特定操作抛出错误。

当然,您想要执行的运算涉及远高于 29 位的精度,但是由于您在 float 算术而不是 decimal 算术中完成了一半的数学运算,因此您之前丢失了大部分精度decimal 甚至可能参与其中。 float 的精度略小于 16 位十进制数字。将 float 计算包装在 Decimal 调用中不会在 Decimal 算术中进行数学运算;您需要从 Decimal 开始:

import decimal
decimal.getcontext().prec = 100 # enough
print(round(decimal.Decimal('0.123456789123456789123456789123456789123')+
decimal.Decimal('123456789123456789123456789'), 2))

关于python - python 中非常大的数字的舍入错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66980514/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com