根据谷歌计算器(-13)% 64 = 51。
根据Javascript(参见这个JSBin),它是-13。
我怎么解决这个问题?
根据谷歌计算器(-13)% 64 = 51。
根据Javascript(参见这个JSBin),它是-13。
我怎么解决这个问题?
当前回答
修正负模(提醒操作符%)
简化使用ES6箭头功能,没有危险的扩展数字原型
Const mod = (n, m) => (n % m + m) % m; console.log (mod (-90, 360));// 270(不是-90)
其他回答
修正负模(提醒操作符%)
简化使用ES6箭头功能,没有危险的扩展数字原型
Const mod = (n, m) => (n % m + m) % m; console.log (mod (-90, 360));// 270(不是-90)
我还要处理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);
}
JavaScript中的%操作符是余数操作符,而不是模数操作符(主要区别在于负数的处理方式):
-1 % 8 // -1,不是7
一个“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
为了好玩,这里有一个“wrap”函数,它的工作方式有点像模数,除了你也可以指定范围的最小值(而不是0):
const wrap = (value = 0, min = 0, max = 10) =>
((((value - min) % (max - min)) + (max - min)) % (max - min)) + min;
基本上就是取真模公式,对其进行偏移,使min值最终为0,然后将min值加回来。
如果有一个值希望保持在两个值之间,则很有用。