JavaScript中的%符号是什么意思?

49
在JavaScript中,百分号(%)是一个运算符,又称为取模运算符。它用于获取两个数相除的余数。例如,10 % 3 将返回1,因为10除以3等于3余1。
10个回答

37

这是一个模运算符,在JavaScript算术操作符中使用。详见文档规范获取更多信息。

%(取余)

取余运算符的使用方法如下:

var1 % var2

取余运算符返回第一个操作数对第二个操作数进行取余的结果,即,在上述语句中,返回var1除以var2所得到的整数余数。例如,12 % 5返回2。结果与var1具有相同的符号;也就是说,-1 % 2返回-1。


1
如果您期望运算符返回一个整数(例如,用于日历计算),那么在应用%-运算符之前应将var1和var2截断为整数。模量就是这样定义的,不能直接使用%。例如:获取2017年3月的最后一个星期日。31 - (((((5 * 2017) / 4) + 4) % 7)) == 25.75 // 不是有效日期 31 - (~~((((5 * 2017) / 4) + 4) % 7)) == 26 // 正确 - Jesper Jensen
2
这个答案并不完全正确。它是一个余数运算符。它们不是一样的! - Jeroen

30

ES6更新:

如其他答案所述,它返回被除数除以除数的余数,但是这不再是模运算符,而是余数运算符。区别在于模运算符的结果将采用除数的符号,而不是被除数的符号。引自MDN

余数运算符返回一个操作数被第二个操作数除后剩下的余数。它总是采用被除数的符号,而不是除数的符号。它使用内置的模函数来生成结果,这是将var1除以var2的整数余数,例如:var1 modulo var2有一个提案在未来的ECMAScript版本中引入实际的模运算符,区别在于模运算符的结果将采用除数的符号,而不是被除数的符号。 示例:
-10 % 3 // -1
10 % -3 // 1

4
这个答案阐述了“真正”的模运算符与当前 JavaScript 取余运算符之间的主要区别,尤其是在将带有不同符号的被除数和除数一起使用时。这是一个细微差别,如果不加注意可能会在算法中引入错误。 - Peter

12

这个函数返回除法操作的余数。 5%2 返回 1


8

这是一个取模运算符
它用于计算余数。

如果我们进行 23 % 10 运算,
首先,我们将 23 除以 10 得到 2.3
然后,取 .3 *(被除数)10 的值
= 3


7
那将是模运算符
它返回除法操作的余数:
var remainder = 3 % 2; // equals 1

6
在JavaScript中,%是一个取余运算符不是模算符)。 取余运算符 %(使用 Math.truc()):
remainder = -5 % 3 = -2

如何计算?

quotient  = Math.trunc(dividend / divisor) = Math.trunc(-5 / 3) = -1;
remainder = dividend - divisor * quotient  = -5 - (3 * -1) = -2

模数函数(使用Math.floor()):

modulo(-5,3) = 1

如何计算?

quotient = Math.floor(dividend / divisor) = Math.floor(-5 / 3) = -2;
remainder = dividend - divisor * quotient = -5 - (3 * -2) = 1

对于正数,无论使用余数运算符还是模运算符,都会得到相同的结果。

5 % 3 = 2
modulo(5,3) = 2

在JavaScript中,没有内置的模运算函数,所以你需要自己编写代码来实现。你可以使用上面提到的Math.floor()函数来实现,也可以使用下面展示的余数运算符轻松实现。

function modulo(n, m) {
   return ((n % m) + m) % m;
}

5

如果有人正在寻找一个真正的取模函数(总是获取除数的符号),可以使用以下代码:

function Modulo(num, denom)
{
    if (num%denom >= 0)
    {
        return Math.abs(num%denom);
    }
    else
    {
        return num%denom + denom;
    }
}

Math.abs 是为了避免 -12%12 → -0 这种情况的出现,虽然它被视为等于 0,但却显示为 -0。

3

取模(%)运算符返回余数。

如果其中一个值是字符串,则尝试将字符串转换为数字。

alert(5%3) 将弹出 2


1

%作为模运算符,返回除法余数。例如:

<script>
    var x = 5;
    var y = 2;
    var z = x % y;
    alert(z);
</script>

这将会弹出1的警告。


0

如果给定 k > 0,这就是我会用来 getModulus 的方法。我认为在 js 中使用 Math.floor(num / k ) 更直观,因为它与 python 中的 num // k 完全相同。

function getModulus(num, k) {
    return num - Math.floor(num / k ) * k
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接