根据谷歌计算器(-13)% 64 = 51。
根据Javascript(参见这个JSBin),它是-13。
我怎么解决这个问题?
根据谷歌计算器(-13)% 64 = 51。
根据Javascript(参见这个JSBin),它是-13。
我怎么解决这个问题?
当前回答
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
使用数字。prototype很慢,因为每次你使用prototype方法时,你的数字都被包裹在一个Object中。而不是这样:
Number.prototype.mod = function(n) {
return ((this % n) + n) % n;
}
Use:
function mod(n, m) {
return ((n % m) + m) % m;
}
参见:https://jsperf.app/negative-modulo/2
比使用原型快97%。当然,如果业绩对你来说很重要的话。
所以看起来如果你想要mod周围的度(所以如果你有-50度- 200度),你会想要使用这样的东西:
function modrad(m) {
return ((((180+m) % 360) + 360) % 360)-180;
}
如果x是整数,而n是2的幂,则可以使用x & (n - 1)而不是x % n。
> -13 & (64 - 1)
51
虽然它没有像你期望的那样运行,但这并不意味着JavaScript没有“运行”。这是JavaScript为模数计算所做的选择。因为根据定义,两个答案都有意义。
请看维基百科。您可以在右边看到不同的语言如何选择结果的符号。