Python 2 小数除法意外结果
Python 2 decimal division unexpected results
我正在尝试计算

使用带有以下代码的 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 中,您的代码应该按预期工作,因为运算符 /
是在浮点数上定义的,而运算符 //
为整数定义。
我正在尝试计算
使用带有以下代码的 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 中,您的代码应该按预期工作,因为运算符 /
是在浮点数上定义的,而运算符 //
为整数定义。