Python 2十进制除法意外结果

时间:2016-10-14 04:35:01

标签: python python-3.x floating-point python-2.x integer-division

我正在尝试进行计算

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并没有在循环中用作Decimal,但我不确定如何解决这个问题。

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:2)

首先,不要将sum用作变量名,因为它是内置的 如果你期望一个float类型的答案,那么它必须提供至少一个用于算术的浮点数,这里:

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