我鍵入此到谷歌/ 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
我鍵入此到谷歌/ 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
的%(remainder)經營者不得在JavaScript中 「破」,即使結果可能是意想不到的 - 特別是在預期更嚴格的數學模量操作的情況下。
該行爲在ECMAScript中定義良好。見11.5.3 Applying the % Operator:
的%[其餘]操作者產生其操作數從一個隱含的除法的餘;左邊的操作數是被除數,右邊的操作數是除數。
..來自除數n和除數d的[浮點]餘數r由數學關係r = n - (d * q)其中q是整數,它是負僅當n/d爲負的和正僅當n/d爲正 ..
以這種方式,以相同的方式表現爲所述remainder operator in Java或C# (用於整數輸入)。
爲了避免這樣的混淆,有一些論據表明它:ES5的確將其隱含地稱爲「餘數運算符」,但Mozilla JavaScript Reference稱它爲「模數運算符」。
另請參閱Modulus operation with negatives values - weird thing?,它實際上從另一個角度看待「破損」。
爲自己運行它,看看我已經在Dolphin,Safari,Chrome,Firefox,IE,Opera – y2k
的人都知道的每個環境中進行了測試順便說一下,Coffeescript使用'%%'運算符修復了這個問題。 – elclanrs
它不是「破碎」。它在[ECMAScript規範](http://es5.github.io/#x11.5.3)中有很好的定義。 – user2864740