Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2十进制除法意外结果_Python_Python 3.x_Floating Point_Python 2.x_Integer Division - Fatal编程技术网

Python 2十进制除法意外结果

Python 2十进制除法意外结果,python,python-3.x,floating-point,python-2.x,integer-division,Python,Python 3.x,Floating Point,Python 2.x,Integer Division,我正在做计算 将python decimal模块与以下代码一起使用: from decimal import * getcontext().prec = 9 sum = Decimal(0) for i in range(1,11): sum += Decimal(1/(i**4)) print sum 然而,这输出1,不是我期望的很小的一部分。我在这里找不到太多关于代码错误的信息。我的猜测是sum没有被用作循环中的小数点,但我不确定如何解决这个问题。首先,不要使用sum作为变量名,

我正在做计算

将python decimal模块与以下代码一起使用:

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

然而,这输出1,不是我期望的很小的一部分。我在这里找不到太多关于代码错误的信息。我的猜测是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

首先,不要使用
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

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

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


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

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

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


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

啊,谢谢您这样做了。不知道总和或需要包含浮点数。谢谢你的快速回答,我会在7点后接受minutes@kalenpw:请注意,即使如此,您也无法获得
十进制
类型的全部精度,因为您仅将
浮点
转换为
十进制
(计算后)。如果你想要高精度,你需要做
s+=Decimal(1)/Decimal(i**4)
。啊,谢谢你做到了。不知道总和或需要包含浮点数。谢谢你的快速回答,我会在7点后接受minutes@kalenpw:请注意,即使如此,您也无法获得
十进制
类型的全部精度,因为您仅将
浮点
转换为
十进制
(计算后)。如果你想要高精度,你需要做
s+=Decimal(1)/Decimal(i**4)
。是的,这是在2.7中完成的,我应该把它包括在问题中。谢谢你在3版中的花絮,我将不得不开始更频繁地使用3。是的,这是在2.7版中完成的,我应该在问题中包括这一点。感谢您在第3版中介绍它,我将不得不更频繁地开始使用第3版。如果您使用的是Python 2中Python 3教科书中的代码,请浏览任何有关关键差异的文章。或其他任何一个。提前意识到这些差异将为您节省数小时的阅读时间……如果您使用的是Python 2中的Python 3教科书中的代码,请浏览任何有关关键差异的文章。或其他任何一个。提前意识到这些差异将为你节省数小时的洗头时间。。。