JavaScript 和 Python 中模运算的不同结果

Different result of modulo operation in JavaScript and Python

在javascript中取模结果是这样的:

-9 % 19 = -9

而在 python 中,相同的模运算会产生以下结果:

-9 % 19 = 10

现在根据有限域python的答案是正确的。 任何人都可以解释为什么 JavaScript 不会 return 结果与 python 相同吗?

这是一个约定问题(参见here),对于Python,它与整数除法的结果有关。 Python 的工作原理是您可以通过将商乘以分母并添加 modulo:

来反转除法并返回原始分子

因此,如果 N 除以 D 得到 Q 和余数或 R (N mod D) 的商,则 Q x D + R = N

应用数字 (Python):

-9 / 19 --> Q = -1, R = 10  --> -1 x 19 + 10 = -9

这也意味着 9 % -19 --> -10

9 / -19 --> Q = -1, R = -10 --> -1 x -19 + -10 = 9

Javascript 对负数的 modulo 使用不同的方法(将分子的符号应用于绝对值除法的余数),在应用数学时不能正确反转符号不同的分子和分母的定义:

Math.floor(-9/19)) --> -1
-9 % 19            --> -9
                   --> -1 x 19 + -9 --> -28 

Math.floor(9/-19)) --> -1
9 % -19            --> 9
                   --> -1 x -19 + 9 --> 28