【问题标题】:Different result of modulo operation in JavaScript and PythonJavaScript和Python中模运算的不同结果
【发布时间】:2021-10-02 11:55:48
【问题描述】:

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

-9 % 19 = -9

而在 python 中,相同的模运算会产生:

-9 % 19 = 10

现在根据有限域 python 的答案是正确的。 谁能解释一下为什么 JavaScript 不返回与 python 相同的结果?

【问题讨论】:

    标签: javascript python modulo


    【解决方案1】:

    这是一个约定问题(请参阅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 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-23
      • 1970-01-01
      • 1970-01-01
      • 2021-05-25
      • 1970-01-01
      • 2021-05-07
      • 2017-11-18
      • 1970-01-01
      相关资源
      最近更新 更多