根据谷歌计算器(-13)% 64 = 51。

根据Javascript(参见这个JSBin),它是-13。

我怎么解决这个问题?


当前回答

如果x是整数,而n是2的幂,则可以使用x & (n - 1)而不是x % n。

> -13 & (64 - 1)
51 

其他回答

Number.prototype.mod = function (n) {
  "use strict";
  return ((this % n) + n) % n;
};

摘自本文:JavaScript Modulo Bug

修正负模(提醒操作符%)

简化使用ES6箭头功能,没有危险的扩展数字原型

Const mod = (n, m) => (n % m + m) % m; console.log (mod (-90, 360));// 270(不是-90)

所以看起来如果你想要mod周围的度(所以如果你有-50度- 200度),你会想要使用这样的东西:

function modrad(m) {
    return ((((180+m) % 360) + 360) % 360)-180;
}

为了好玩,这里有一个“wrap”函数,它的工作方式有点像模数,除了你也可以指定范围的最小值(而不是0):

const wrap = (value = 0, min = 0, max = 10) =>
  ((((value - min) % (max - min)) + (max - min)) % (max - min)) + min;

基本上就是取真模公式,对其进行偏移,使min值最终为0,然后将min值加回来。

如果有一个值希望保持在两个值之间,则很有用。

如果x是整数,而n是2的幂,则可以使用x & (n - 1)而不是x % n。

> -13 & (64 - 1)
51