模数运算符报告具有负值的不同结果

时间:2014-04-16 23:09:58

标签: javascript math operator-keyword modulo

我将其输入google / wolfram alpha:

-15 % 360

我得到345

当我在javascript中执行此操作时,我得到-15

https://www.google.com/search?q=-15%20%%20360

http://www.wolframalpha.com/input/?i=-15+mod+360

http://jsfiddle.net/BG3jW/

1 个答案:

答案 0 :(得分:1)

%(remainder)运算符在JavaScript中没有“破坏”,即使结果可能是意外的 - 特别是预计会有更严格的数学模运算。

行为在ECMAScript中定义明确。见11.5.3 Applying the % Operator

  

%[余数]运算符从隐含的除法中产生其余的操作数;左操作数是被除数,右操作数是除数..

     

..来自被除数n和除数d的[浮点]余数r由数学关系r = n - (d * q)定义,其中q是仅在n时为负的整数只有当n / d为正时,/ d才为负数和正数 ..

以这种方式,它的行为方式与remainder operator in Java或C#相同(对于整数输入)。

有一些论据认为should be referred to as the remainder operator可以避免这种混淆:ES5确实隐含地将其称为“余数运算符”,但Mozilla JavaScript Reference将其称为“模运算符”。


另见Modulus operation with negatives values - weird thing?,它实际上从另一个角度看待“破裂”。