python - 在 Python 中使用整数除法

标签 python

考虑这个 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/

相关文章:

python - 如何防止同一台电脑中的麦克风到扬声器的回送回声

python - 重复数组n次

python - 如何使用QtWebKit设置浏览器的大小

Python 变量作用域和 .var

python - 找到总和为 N 的对的更好方法

python - 使用 Python 编写 bool 表达式

python - .json 扩展文件 + 时间戳 + Pandas + Python

python - 如何在 CSV 行中搜索特定列中的字符串,如果找到则将整行打印到文件

python - 我可以在 View 函数内的函数中返回响应吗?

python - python list 存储的是对象还是对象的引用?