【发布时间】:2011-04-04 06:25:04
【问题描述】:
在我的应用程序中,我遇到了以下问题并对结果感到惊讶:
8/-7=-2(均为整数)。
这是什么意思?
【问题讨论】:
-
仅在 Python 2 中?在 Python 3.8.10(约 2021-11-26)中,屏幕上的结果为
-1.1428571428571428。
标签: python division integer-division
在我的应用程序中,我遇到了以下问题并对结果感到惊讶:
8/-7=-2(均为整数)。
这是什么意思?
【问题讨论】:
-1.1428571428571428。
标签: python division integer-division
对于实际值,即8.0/(-7.0),结果大致为-1.143。
您使用整数除法的结果正在向下舍入到更负的-2。 (这也被称为“楼层划分”)
这就是为什么你会得到一些令人困惑的答案:
>>> 8/(-7)
-2
>>> 8/7
1
注意:这在 Python 3 中是“固定的”,8/(-7) 的结果将是 -1.143。所以如果你没有理由使用 Python 2,你应该升级。 ;)
在 Python 3 中,如果您仍然需要整数除法,可以使用 // 运算符。这将为您提供与 Python 2 中的 8/(-7) 相同的答案。
这是一个关于该主题的 Python 增强提案:PEP 238 -- Changing the Division Operator
【讨论】:
Python 总是对负数除法和正数除法进行“地板除法”。
那是
1/10 = 0
1/-10 = -1
但有时我们需要 1/-10 为 0
我发现它可以通过先使用浮点除法然后将结果转换为 int 来完成,例如
int(float(1)/-10) = 0
这对我来说很好,不需要导入未来的部门或升级到 Python 3
希望对你有帮助~
【讨论】:
要让 Python 自动将整数除法转换为浮点数,您可以使用:
from __future__ import division
现在:
8/-7=-1.1428571428571428
标准 Python 2 中没有此功能,不会破坏依赖整数除法的现有代码。
不过,这是 Python 3 的默认行为。
【讨论】:
当两个值都是整数时,Python使用Floor除法。
【讨论】:
在 Python 中,/ 运算符用于整数除法。您可以将其视为浮点除法,然后是 floor 操作。
例如,
8/7 == 楼层(8.0/7.0) == 1
8/-7 == 楼层(8.0/-7.0) == -2
【讨论】: