是什么决定了整数m%n的符号?

use*_*828 9 python modulo integer-division

Python中的模数令人困惑.

在Python中,%运算符正在计算余数:

>>> 9 % 5
4
Run Code Online (Sandbox Code Playgroud)

然而:

>>> -9 % 5
1
Run Code Online (Sandbox Code Playgroud)

为什么结果1?不是-4吗?

wim*_*wim 14

因为在python中,符号与分母匹配.

>>> 9 % -5
-1
>>> -9 % 5
1
Run Code Online (Sandbox Code Playgroud)

有关为何以这种方式实现的解释,请阅读Guido博客文章.


Len*_*bro 5

-10%5为0,即-10均匀地除以5.

你问为什么-9%5不是-4,答案是1和-4都可以是正确答案,这取决于-9除以5是什么.当然-9除以5是1.8,但这是整数除法,在Python 3中用Python表示,所以我在这里使用//清楚它是我们所说的整数除法.

我将通过不使用负数来解释这一点,这更容易.

9 // 5是1.也就是说,你只能从9中减去5,其余的就是4.但是如果你再从9减去5,那么剩下的就变为-1!

所以-1是9%5的正确答案,如果9 // 5是2.

在Python 9 // 5中是1,因为Python整数除法是一个底层划分,即它总是向下舍入.如果它已向上舍入9 // 5将是2,而9%5将为-1.

现在让我们看一下使用负数的情况:-9除以5现在为-2.因为它是地板分割,所以它总是向下舍入.这意味着其余的是1.所以-9%5是1,而不是-4.