为什么在Python中这个除法不管用?
考虑一下:
>>> 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