为什么在Python中这个除法不管用?

9 投票
4 回答
27659 浏览
提问于 2025-04-15 16:19

考虑一下:

>>> numerator = 29
>>> denom = 1009
>>> print str(float(numerator/denom))
0.0

我该怎么做才能让它返回一个小数呢?

4 个回答

1

在你的评估中,你是对结果进行了类型转换,其实你应该对操作数进行类型转换。

8

在Python 2.x中,除法的运算方式和C语言等类似的语言一样:如果两个数字都是整数,结果会被截断成整数。所以,29除以1009的结果是0。这里的0作为浮点数就是0.0。为了得到正确的结果,你需要在除法之前把其中一个数字转换成浮点数:

print str(float(numerator)/denominator)

而在Python 3.x中,除法的运算方式更符合我们的直觉,所以你会得到正确的数学结果(当然可能会有浮点数误差)。

30

在Python 3之前,Python的除法运算符/在处理两个整数时,表现得像C语言中的除法运算符:它会返回一个整数结果,如果有小数部分的话,会直接舍去。这一点可以参考:PEP 238

>>> n = 29
>>> d = 1009
>>> print str(float(n)/d)
0.0287413280476

在Python 2(可能还有更早的版本)中,你可以使用:

>>> from __future__ import division
>>> n/d
0.028741328047571853

撰写回答