【发布时间】:2021-10-02 11:55:48
【问题描述】:
在javascript中取模的结果是这样的:
-9 % 19 = -9
而在 python 中,相同的模运算会产生:
-9 % 19 = 10
现在根据有限域 python 的答案是正确的。 谁能解释一下为什么 JavaScript 不返回与 python 相同的结果?
【问题讨论】:
标签: javascript python modulo
在javascript中取模的结果是这样的:
-9 % 19 = -9
而在 python 中,相同的模运算会产生:
-9 % 19 = 10
现在根据有限域 python 的答案是正确的。 谁能解释一下为什么 JavaScript 不返回与 python 相同的结果?
【问题讨论】:
标签: javascript python modulo
这是一个约定问题(请参阅here),对于 Python,它与整数除法的结果有关。 Python 的工作原理是,您可以通过将商乘以分母并加上模数来反转除法并返回原始分子:
因此,如果 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 对负数取模使用了不同的方法(将分子的符号应用于绝对值之间除法的余数),当将数学定义应用于具有不同符号的分子和分母时,该方法不能正确反转:
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
【讨论】: