JavaScriptの剰余では、第1オペランドが正のときは正を、負のときは負を返します。
たとえば、
(-5) % 2
の計算結果は-1になります。
これが自然だと思う人はそれでいいのですが、
僕はこれが気持ち悪いので、常に正を返すようにします。
function mod(i, j) {
return (i % j) < 0 ? (i % j) + 0 + (j < 0 ? -j : j) : (i % j + 0);
}
iが0のときはマイナスゼロが返ってくることがあり、それも気持ち悪いので
0を加算してマイナスゼロを避けています。
補足: このページによると、
Ruby, Python, Perlでは剰余結果が正になり、
C, Java, PHPでは剰余結果が負になるそうです。