Javascript 模运算符以负值报告不同的结果
我在google/wolfram alpha中输入:Javascript 模运算符以负值报告不同的结果,javascript,math,operator-keyword,modulo,Javascript,Math,Operator Keyword,Modulo,我在google/wolfram alpha中输入: -15%360 我得到了345 当我在javascript中这样做时,我得到-15 JavaScript中的%()运算符没有“断开”,即使结果可能出乎意料-尤其是在预期会有更严格的数学模运算的情况下 该行为在ECMAScript中定义良好。见: %[余数]运算符从隐含除法得到其操作数的余数;左操作数是被除数,右操作数是除数 。。被除数n和除数d的[浮点]余数r由数学关系r=n定义− (d*q),其中q是仅当n/d为负且仅当n/d为正时才为
-15%360
我得到了345
当我在javascript中这样做时,我得到-15
JavaScript中的%()运算符没有“断开”,即使结果可能出乎意料-尤其是在预期会有更严格的数学模运算的情况下
该行为在ECMAScript中定义良好。见:
%[余数]运算符从隐含除法得到其操作数的余数;左操作数是被除数,右操作数是除数
。。被除数n和除数d的[浮点]余数r由数学关系r=n定义− (d*q),其中q是仅当n/d为负且仅当n/d为正时才为负且仅当n/d为正时才为正的整数
以这种方式,它的行为方式与或C#(用于整数输入)的行为方式相同
有人认为它是为了避免这种混淆:ES5确实隐式地将其称为“余数运算符”,但ES5将其称为“模运算符”
另请参阅,它实际上是从另一个角度来看待“破碎性”。自己运行它,看看我在Dolphin、Safari、Chrome、Firefox、IE、OperaBtw、Coffeescript等人类已知的每个环境中都进行了测试。Coffeescript使用
%%
操作符修复了这个问题。它没有“破碎”。它在中有很好的定义。相对于整数除法,模必须满足a%b=a-(a/b)*b。现在我们必须决定(-15)/360、0或-1的值更自然。0表示负余数,-1表示正余数。JS决定在整数除法中向0舍入,从而给出负余数。