2014-04-16 28 views
1

我鍵入此到谷歌/ 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/

+0

爲自己運行它,看看我已經在Dolphin,Safari,Chrome,Firefox,IE,Opera – y2k

+0

的人都知道的每個環境中進行了測試順便說一下,Coffeescript使用'%%'運算符修復了這個問題。 – elclanrs

+0

它不是「破碎」。它在[ECMAScript規範](http://es5.github.io/#x11.5.3)中有很好的定義。 – user2864740

回答

1

的%(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?,它實際上從另一個角度看待「破損」。