如何在JavaScript中计算负整数的模数?

时间:2013-09-04 15:37:42

标签: javascript jquery math modulo negative-number

我正在尝试通过递增或递减1迭代jQuery对象数组。因此,对于递减部分,我使用此代码:

var splitted_id = currentDiv.attr('id').split('_');
var indexOfDivToGo = parseInt(splitted_id[1]);
indexOfDivToGo = (indexOfDivToGo-1) % allDivs.length;
var divToGo = allDivs[indexOfDivToGo];

所以我有4个带id的元素:

div_0
div_1
div_2
div_3

我期待它迭代为 3 - 2 - 1 - 0 - 3 - 2 - 等..

但它在零之后返回-1,因此它被卡住了。所以它迭代为:

3 - 2 - 1 - 0 - -1 - 卡住了

我知道我可以通过将代码的第二行更改为

来解决这个问题
indexOfDivToGo = (indexOfDivToGo-1 + allDivs.length) % allDivs.length;

但我想知道为什么JavaScript不计算负面mod。也许这对另一位编码员也有帮助。

2 个答案:

答案 0 :(得分:29)

你可以试试这个:p -

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

查看this

答案 1 :(得分:13)

如果模运算的第一个操作数为负数且第二个操作数为正数,则从C继承的大多数语言将返回否定结果。我不确定为什么这个决定是最初的。可能最接近当时处理器中的处理器。无论如何,从那以后,“为什么”的答案很可能是“因为那是那些知道C期望的程序员”。

MDC Reference包含指向a proposal to introduce a proper mod operator的指针。但即便如此,也会保留现有的%运算符(他们称之为“余数”)来更好地区分它们,并引入新的中缀词符号a mod b。该提案的日期是2011年,我不知道最近这方面的发展情况。