Python 负整数除法

Python 负整数除法,python,division,integer-division,Python,Division,Integer Division,在我的应用程序中,我遇到了以下问题,并对结果感到惊讶: 8/-7=-2(两个整数) 这意味着什么?对于实际值,即8.0/(-7.0),结果大致为-1.143 使用整数除法的结果将向下舍入到更负的值-2。(这也称为“楼层划分”) 这就是为什么你会得到一些令人困惑的答案: >>> 8/(-7) -2 >>> 8/7 1 注意:这在Python 3中是“固定的”,其中8/-7的结果将是-1.143。因此,如果您没有理由使用Python 2,您应该升级。;) 在Py

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

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


这意味着什么?

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

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

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

>>> 8/(-7)
-2
>>> 8/7
1
注意:这在Python 3中是“固定的”,其中
8/-7
的结果将是
-1.143
。因此,如果您没有理由使用Python 2,您应该升级。;)

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


这里有一个关于这个主题的Python增强建议:

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

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

比如说,

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

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


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

from __future__ import division
现在:

标准的Python2中没有此功能,不能破坏依赖整数除法的现有代码。 但是,这是Python3的默认行为。

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

就是

1/10 = 0
1/-10 = -1
但有时我们需要1/-10等于0

我发现可以先使用浮点除法,然后将结果转换为int,例如

int(float(1)/-10) = 0
这对我来说很好,不需要导入未来的分区或升级到Python3


希望它能帮助你~

@Ira:是的!不过,他们改变了Python3的这一点。@intuited:嗯,看起来可能是这样,但只有当你不像计算机那样思考的时候。5/2和右移一点是一样的,两种情况下都是2-5/2应该等于-5的右移,也就是-3。这里的问题当然是Python是一种高级语言,您不必知道这一点。这就是为什么整数除法一开始是错误的,现在已经被修正了。@Lennart:所以你把-5除以2,得到-3和1的余数。“为了还清我们欠你的5辆电动车的债务,我们每人将向你支付3辆电动车,你将为我们提供一辆电动车,让我们两人飞回家去。当然,我想是有道理的。@intuited:a应该等于(a//b)*b+a%b。因此-5//2==-3。@Lennartreegebro:对于自然数或实数领域内的所有x和y,使用为领域定义的除法运算符,(n+d)/d=(n/d)+1。Python定义整数除法的方式是,即使n为负数,这个有用的公理也适用。即使有些人认为整数应该从实数中借用(-n)/d=-(n/d),这个公理也很少有用。当试图从一个数字中提取数字时,使用“-123 mod 10”产生7并不十分有用,但使用“-3”产生7也不更好。不,/不是整数除法,而是除法。然而,在Python 2中,将两个整数相除将返回一个整数。这是令人惊讶的,并且在Python 3中得到了修复。@Lennart:这对C程序员和阅读过手册的任何人来说都不是一个震惊,也不是“错误”。@John:它违反了Python的核心原则,因此在Python的上下文中可以称为“错误”。@stackoverflowuser2010不,对于不懂Python的C/C++程序员来说,这是出乎意料的。然而,这对他们来说也不是“错误的”。
int(float(1)/-10) = 0