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

时间:2017-09-04 21:22:39

标签: python floating-point division

这是我的小规模项目。目的是近似pi。我知道它不是很好,但算法是正确的。

CSS

好像应该有用,对吗?在python 3上,完全相同的代码给了我一个准确的答案。但是,在2.7.10中,这发生在shell中:

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)

有人可以向我解释为什么会发生这种情况以及如何解决这个问题吗?我已经尝试过转换为字符串,格式化,舍入等常规方法,但这些方法都不起作用。就像我的变量被保存为1和0并尽管它们的值不断变化。再一次,相同的代码在Python 3上运行良好。

2 个答案:

答案 0 :(得分:1)

在python2上,整数之间的除法导致整数除法,最终答案被截断为整数。

>>> 1 / 2
0

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

您希望至少有一个float类型的操作数:

>>> 1. / 2
0.5
for x in range(0, 10):
    adds += 1. / (1 + 4 * x)
    subtracts += 1. / (3 + 4 * x)

请注意1.1.0

答案 1 :(得分:0)

在Python 2.7上,x / y是整数除法,但你可以使用{3}}使用Python 3的真正除法:

__future__ division

出:

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)