Python 2 小数除法意外结果

Python 2 decimal division unexpected results

我正在尝试计算

formula

使用带有以下代码的 python 十进制模块:

from decimal import *
getcontext().prec = 9
sum = Decimal(0)
for i in range(1,11):
    sum += Decimal(1/(i**4))
print sum

然而,这会输出 1,而不是像我预期的那样很小的一部分。我在这里 https://docs.python.org/2/library/decimal.html 找不到太多关于代码错误的信息。我的猜测是 sum 在循环中没有被用作小数,但我不确定如何解决这个问题。

首先,不要使用sum作为变量名,因为它是内置的。
如果您希望获得浮点型答案,则有必要为算术提供至少一个浮点数,此处:

s = Decimal(0)

for i in range(1,11):
  s += Decimal(1./(i**4)) # dividing 1. or 1.0 instead of just 1
print s

这给出:

1.08203658

如果你使用Python 2.x,那么在表达式中:1/(i**4),使用整数除法,作为i=1的结果,它等于1并且对于所有其他 i>1,它得到 0。

只需将浮点数添加到 1:1./(i**4),这应该可以解决问题。

PS 在 Python 3.x 中,您的代码应该按预期工作,因为运算符 / 是在浮点数上定义的,而运算符 //为整数定义。