Python 2.7 自动使用/ 运算符作为整数(整数)除法,这将始终产生整数。
例如:
1/2 = 0
3/4 = 0
100/30 = 3
要进行浮点除法,必须将其中一个或两个值作为浮点类型。
像这样:
Area = 1.0/2 * Base * Height # 1.0 is a float type, 1 is an integer type
结果不是您所期望的,因为 Python 使用整数除法和运算顺序来计算表达式。
如果您在 Python 中计算 16 * 12 / 2,Python 会将其解释为 (16 * 12) / 2 或 192 / 2 = 96
如果您评估 1/2 * 16 * 12,Python 会将其解释为 (((1/2) * 16) * 12) = (0 * 16) * 12
更多示例:
Area = Base * Height * (1.0/2.0)
Python 这次评估 (1.0/2.0) first,因为运算顺序决定了括号首先被评估。由于 1.0 和 2.0 是浮点数而不是整数,Python 可以很好地执行浮点除法。你得到这个:
Base * Height * (0.5)
= 192 * 0.5
= 96
,它可以满足您的期望。
相比之下:
Base * Height * (1/2)
= Base * Height * (0) # since 1/2 rounds down to 0 in integer division
= 192 * 0
= 0
Carpetsmoker 的替代解决方案:
from __future__ import division
这一行将为您提供 Python 2.x 程序中的 Python 3.x 行为,并且 Python 3.x 接受 / 运算符作为浮点除法,即使两个值都是整数类型。因此,在你导入这个之后,/ 成为浮点除法运算符。
>>> from __future__ import division
>>> 1/2
0.5