根据谷歌计算器(-13)% 64 = 51。
根据Javascript(参见这个JSBin),它是-13。
我怎么解决这个问题?
根据谷歌计算器(-13)% 64 = 51。
根据Javascript(参见这个JSBin),它是-13。
我怎么解决这个问题?
当前回答
如果x是整数,而n是2的幂,则可以使用x & (n - 1)而不是x % n。
> -13 & (64 - 1)
51
其他回答
接受的答案让我有点紧张,因为它重用了%操作符。如果Javascript在未来改变了行为呢?
下面是一个不重用%的解决方案:
function mod(a, n) {
return a - (n * Math.floor(a/n));
}
mod(1,64); // 1
mod(63,64); // 63
mod(64,64); // 0
mod(65,64); // 1
mod(0,64); // 0
mod(-1,64); // 63
mod(-13,64); // 51
mod(-63,64); // 1
mod(-64,64); // 0
mod(-65,64); // 63
所以看起来如果你想要mod周围的度(所以如果你有-50度- 200度),你会想要使用这样的东西:
function modrad(m) {
return ((((180+m) % 360) + 360) % 360)-180;
}
修正负模(提醒操作符%)
简化使用ES6箭头功能,没有危险的扩展数字原型
Const mod = (n, m) => (n % m + m) % m; console.log (mod (-90, 360));// 270(不是-90)
有一个NPM包可以帮你完成这项工作。您可以使用以下命令安装它。
NPM install just-modulo—save
从README复制的用法
import modulo from 'just-modulo';
modulo(7, 5); // 2
modulo(17, 23); // 17
modulo(16.2, 3.8); // 17
modulo(5.8, 3.4); //2.4
modulo(4, 0); // 4
modulo(-7, 5); // 3
modulo(-2, 15); // 13
modulo(-5.8, 3.4); // 1
modulo(12, -1); // NaN
modulo(-3, -8); // NaN
modulo(12, 'apple'); // NaN
modulo('bee', 9); // NaN
modulo(null, undefined); // NaN
GitHub存储库可以通过以下链接找到:
https://github.com/angus-c/just/tree/master/packages/number-modulo
Number.prototype.mod = function (n) {
"use strict";
return ((this % n) + n) % n;
};
摘自本文:JavaScript Modulo Bug