根据谷歌计算器(-13)% 64 = 51。
根据Javascript(参见这个JSBin),它是-13。
我怎么解决这个问题?
根据谷歌计算器(-13)% 64 = 51。
根据Javascript(参见这个JSBin),它是-13。
我怎么解决这个问题?
当前回答
JavaScript中的%操作符是余数操作符,而不是模数操作符(主要区别在于负数的处理方式):
-1 % 8 // -1,不是7
其他回答
JavaScript中的%操作符是余数操作符,而不是模数操作符(主要区别在于负数的处理方式):
-1 % 8 // -1,不是7
所以看起来如果你想要mod周围的度(所以如果你有-50度- 200度),你会想要使用这样的东西:
function modrad(m) {
return ((((180+m) % 360) + 360) % 360)-180;
}
我还要处理négative a和- n
//best perf, hard to read
function modul3(a,n){
r = a/n | 0 ;
if(a < 0){
r += n < 0 ? 1 : -1
}
return a - n * r
}
// shorter code
function modul(a,n){
return a%n + (a < 0 && Math.abs(n));
}
//beetween perf and small code
function modul(a,n){
return a - n * Math[n > 0 ? 'floor' : 'ceil'](a/n);
}
Number.prototype.mod = function (n) {
"use strict";
return ((this % n) + n) % n;
};
摘自本文:JavaScript Modulo Bug
一个“mod”函数,返回一个正的结果。
var mod = function (n, m) {
var remain = n % m;
return Math.floor(remain >= 0 ? remain : remain + m);
};
mod(5,22) // 5
mod(25,22) // 3
mod(-1,22) // 21
mod(-2,22) // 20
mod(0,22) // 0
mod(-1,22) // 21
mod(-21,22) // 1
当然
mod(-13,64) // 51