我在python中有以下数组
n = [565387674.45, 321772103.48,321772103.48, 214514735.66,214514735.65,
357524559.41]
如果我将所有这些元素加在一起,就会得到:
sum(n)
1995485912.1300004
但是,这个总和应该是:
1995485912.13
这样,我知道浮点“错误”。我已经使用了numpy的isclose()
函数来检查更正后的值,但是
此限额是多少?有什么办法可以减少这种“错误”?
这里的主要问题是该错误会传播到其他操作,例如,以下断言必须为true:
assert (sum(n) - 1995485911) ** 100 - (1995485912.13 - 1995485911) ** 100 == 0
。
答案 0 :(得分:1)
这是浮点数的问题。一种解决方案是使它们以字符串形式表示并使用decimal
模块:
n = ['565387674.45', '321772103.48', '321772103.48', '214514735.66', '214514735.65',
'357524559.41']
from decimal import Decimal
s = sum(Decimal(i) for i in n)
print(s)
打印:
1995485912.13
答案 1 :(得分:-1)
您可以使用round(num, n)
函数将数字四舍五入到所需的小数位。因此,在您的示例中,您将使用round(sum(n), 2)