【发布时间】:2015-12-29 22:16:08
【问题描述】:
为什么我的代码只有在将除数变为浮点数时才有效?
a = 50/1000.0*100
当我执行以下操作时,它返回一个 0。
a = 50/1000*100
【问题讨论】:
-
Python division的可能重复
标签: python floating-point semantics integer-division
为什么我的代码只有在将除数变为浮点数时才有效?
a = 50/1000.0*100
当我执行以下操作时,它返回一个 0。
a = 50/1000*100
【问题讨论】:
标签: python floating-point semantics integer-division
当两个操作数在 Python 2 中都是整数时,a/b 与 a//b 相同,这意味着你得到整数除法。 50 / 1000 在这种情况下为 0(余数为 50,从 divmod(50, 1000) 的返回值可以看出)。
【讨论】:
如果你使用 python 2.X 上面的结果来了 如果使用 python 3.x 结果是
Python 3.4.3 (default, Jul 28 2015, 18:24:59)
[GCC 4.8.4] on linux
>>> a = 50/1000*100
>>> a
5.0
>>> a = 50/1000.0*100
>>> a
5.0
>>>
【讨论】:
50/1000 在 python 2.x 中为 0,因为整数除法假定您需要整数结果。如果您将分子或分母转换为浮点数,您将获得正确的行为。或者,您可以使用
from __future__ import division
获取 python 3.x 语义。
【讨论】: