Python负数取模正数

4

为什么-20 % 3 = 1?与负数%正数相关的公式让我感到困惑。

(我在Quora上看到了很多相关的问题,但仍然不清楚使用的公式)


1
好的,看起来是 3-(20%3) - OneCricketeer
1
python 执行取整除法,你可以在这里找到一个好的解释:http://python-history.blogspot.in/2010/08/why-pythons-integer-division-floors.html。 - Kallz
请注意,这是非常有用的,也更加自然。假设你将每天编号为0-6,并且你知道今天是第4天,那么20天前是星期几?(4 - 20) % 7 == -16 % 7 == 5 - juanpa.arrivillaga
@Kallz 难以理解 - havin
@juanpa.arrivillaga 为什么要计算天数? - havin
Python遵循数学规则,其中模数要么为零,要么与除数具有相同的符号。实际上,除法向负无穷截断。像APL这样的语言也实现了这种方式的模数,它可以追溯到1960年代。C、C++和一些其他语言的余数等于零或与被除数具有相同的符号,实际上是向零舍入的除法。数学/ Python方法的优点是关系(a + b m)%m = a,无论b小于、等于还是大于零。 - rcgldr
1个回答

0

我不确定公式,但你可以将x加到负数上,使得(x+负数)>=0,并且x是模值的倍数。这是正确的,因为x % k = (x+ y*k) % k


你能否解释一下上面的数字(-20%3 = 1)?我无法理解。 - havin
@havin - 当向负无穷截断除法时,-20 / 3 = -7,因此 -20 % 3 = (-20) - (-21) = 13 x (-7) + 1 = -21 + 1 = -20 - rcgldr
将-20与21相加
-20%3 =(-20 + 21)%3 = 1%3 = 1
这里(-20 + 21)%3可以写作(-20%3)+(21%3)。 由于(21%3) = 0,因此它不会影响答案,但它将帮助我们找到答案。
- ksohan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接