python2.7中的除法不会产生十进制值

python2.7中的除法不会产生十进制值,python,floating-point,division,Python,Floating Point,Division,这是我的小规模项目。目的是估算pi。我知道它不整洁,但算法是正确的 adds = 0 subtracts = 0 for x in range(0, 10): adds += 1/(1 + 4*x) subtracts += 1/(3 + 4*x) print(adds) #DEBUGGING print(subtracts) #DEBUGGING pi = float(4*(adds + subtracts) print(pi) 看起来应该有用,对吧?在Py

这是我的小规模项目。目的是估算pi。我知道它不整洁,但算法是正确的

adds = 0
subtracts = 0
for x in range(0, 10):
    adds += 1/(1 + 4*x)
    subtracts += 1/(3 + 4*x)
    print(adds) #DEBUGGING
    print(subtracts) #DEBUGGING

pi = float(4*(adds + subtracts)
print(pi)
看起来应该有用,对吧?在Python3上,同样的代码给了我一个准确的答案。然而,在2.7.10中,这发生在外壳中:

===================== RESTART: C:/Python27/Scripts/pi.py 
=====================
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
4.0
>>> 

有人能给我解释一下为什么会发生这种情况,以及我如何纠正这种情况吗?我尝试过传统的方法,如转换为字符串、格式化、舍入等,但都不管用。这就像我的变量被保存为1和0,尽管它们的值不断变化。同样,同样的代码在Python3上运行良好。

在python2上,整数之间的除法产生整数除法,最终答案被截断为整数

>>> 1 / 2
0
在python3上,情况并非如此,因为除非明确使用
/
整数除法运算符,否则除法会自动产生
浮点
结果

您至少需要一个
float
类型的操作数:

>>> 1. / 2
0.5


请注意,python2上的
1.
1.0

,整数之间的除法会导致整数除法,最终答案被截断为整数

>>> 1 / 2
0
在python3上,情况并非如此,因为除非明确使用
/
整数除法运算符,否则除法会自动产生
浮点
结果

您至少需要一个
float
类型的操作数:

>>> 1. / 2
0.5


请注意,
1.
在Python2.7上是
1.0
x/y
是整数除法,但您可以使用
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu除法
使用Python3的实除法:

from __future__ import division
adds = 0
subtracts = 0
for x in range(0, 10):
    adds += 1/(1 + 4*x)
    subtracts += 1/(3 + 4*x)
    print(adds) #DEBUGGING
    print(subtracts) #DEBUGGING

pi = float(4*(adds + subtracts))
print(pi)
输出:


在Python2.7上,
x/y
是整数除法,但是您可以使用
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu除法
使用Python3的实除法:

from __future__ import division
adds = 0
subtracts = 0
for x in range(0, 10):
    adds += 1/(1 + 4*x)
    subtracts += 1/(3 + 4*x)
    print(adds) #DEBUGGING
    print(subtracts) #DEBUGGING

pi = float(4*(adds + subtracts))
print(pi)
输出:


Python2使用整数除法将数字输入为浮点数,它会起作用。这已经解决并解释过了。Python2使用整数除法将数字输入为浮点数,它会起作用。它已经解决并解释过了。这很有效。非常感谢。这很有效。非常感谢。小心更改语法的机制,你可能不希望在每个地方都出现这种行为。人们更熟悉
/
作为真正的划分,这是它在以后版本中被更改的原因之一,并且只要你知道如何使用它,更改它不会很糟糕。小心更改语法的机制,您可能不希望在每个地方都出现这种行为。人们更熟悉
/
作为真正的部门,这是它在以后的版本中被更改的原因之一,并且只要您知道如何使用它,更改它不会有什么坏处。