Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaScript中计算负整数的模?_Javascript_Jquery_Math_Modulo_Negative Number - Fatal编程技术网

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

如何在JavaScript中计算负整数的模?,javascript,jquery,math,modulo,negative-number,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为的元素:

我试图通过递增或递减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。也许这对另一个程序员也有帮助。

你可以试试这个:p-

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

检查一下

如果模运算的第一个操作数为负数,第二个操作数为正数,则大多数从C继承的语言将返回负数结果。我不知道当初为什么做出这个决定。可能最接近当时处理器在汇编中所做的。在任何情况下,从那时起,“为什么”的答案很可能是“因为了解C语言的程序员所期望的”


包含指向的指针。但即使这样,也会保留现有的
%
操作符(他们称之为“余数”以更好地区分它们),并引入一种新的中缀词表示法
a mod b
。该提案始于2011年,我不知道这方面的最新进展。

有几种消极的mod解决方案。可能的副本应该考虑改变你接受的答案到底部,因为那一个给你一个实际的解决问题的问题。我记得C没有这个问题,但这是很久以前的事了。我不知道JavaScript是C的后代:)谢谢你的回答。有关编程语言演变的详细信息,请参阅例如。列表:“受Self、HyperTalk、AWK、C、Perl、Python、Java、Scheme的影响”。你能解释一下为什么要模两次吗?我认为
(这个+n)%n
就足够了。@Marcel如果模是360,输入是-710,你的方法就行不通了。