考虑这个 Python 部门:
基数 = 12.0
高度=16
面积 = 1/2 * 底面 * 高度
解决方案表明了这一点
面积=(底*高)/2;
让我感到困惑的是 1/2 将是 float ,而 Python 将只显示 0,而不是 0.5。为什么解决方案在这种情况下使用/2?
最佳答案
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),因为操作顺序决定首先计算括号。由于 1.0 和 2.0 是 float 而不是整数,Python 可以很好地执行 float 除法。你得到这个:
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
关于python - 在 Python 中使用整数除法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21768286/