59

在我的应用程序中,我遇到了以下情况并对结果感到惊讶:

8/-7=-2(两个整数)。

这是什么意思?

4

5 回答 5

56

对于实际值,即8.0/(-7.0),结果大致为-1.143

您使用整数除法的结果正在向下舍入到 的更负值-2。(这也称为“楼层划分”)

这就是为什么你会得到一些令人困惑的答案:

>>> 8/(-7)
-2
>>> 8/7
1

注意:这在 Python 3 中是“固定的”,结果8/(-7)将是-1.143. 所以如果你没有理由使用 Python 2,你应该升级。;)

在 Python 3 中,如果您仍然想要整数除法,可以使用//运算符。8/(-7)这将为您提供与Python 2 中相同的答案。

这是关于该主题的 Python 增强提案:PEP 238 -- 更改除法运算符

于 2011-04-04T06:29:16.953 回答
22

Python 总是对负数除法和正数除法进行“地板除法”。

那是

1/10 = 0
1/-10 = -1

但有时我们需要 1/-10 为 0

我发现它可以通过首先使用浮点除法然后将结果转换为 int 来完成,例如

int(float(1)/-10) = 0

这对我来说很好,不需要导入未来的部门或升级到 Python 3

希望对你有帮助~

于 2015-07-20T06:35:30.313 回答
9

要让 Python 自动将整数除法转换为浮点数,您可以使用:

from __future__ import division

现在:

8/-7=-1.1428571428571428

标准 Python 2 中没有此功能,不会破坏依赖整数除法的现有代码。

但是,这是 Python 3 的默认行为。

于 2011-04-04T06:35:27.683 回答
4

当两个值都是整数时,Python 使用 Floor 除法。

于 2011-04-04T06:29:49.220 回答
0

在 Python 中,/运算符用于整数除法。您可以将其视为浮点除法,然后进行floor操作。

例如,

8/7 == 楼层(8.0/7.0) == 1

8/-7 == 楼层(8.0/-7.0) == -2

于 2011-04-04T06:31:57.320 回答