在JavaScript中,百分号(%)是一个运算符,又称为取模运算符。它用于获取两个数相除的余数。例如,10 % 3 将返回1,因为10除以3等于3余1。
ES6更新:
如其他答案所述,它返回被除数除以除数的余数,但是这不再是模运算符,而是余数运算符。区别在于模运算符的结果将采用除数的符号,而不是被除数的符号。引自MDN
余数运算符返回一个操作数被第二个操作数除后剩下的余数。它总是采用被除数的符号,而不是除数的符号。它使用内置的模函数来生成结果,这是将var1
除以var2
的整数余数,例如:var1 modulo var2
。有一个提案在未来的ECMAScript版本中引入实际的模运算符,区别在于模运算符的结果将采用除数的符号,而不是被除数的符号。
示例:
-10 % 3 // -1
10 % -3 // 1
这个函数返回除法操作的余数。 5%2
返回 1
这是一个取模运算符。
它用于计算余数。
如果我们进行 23 % 10 运算,
首先,我们将 23 除以 10 得到 2.3
然后,取 .3 *(被除数)10 的值
= 3
%
是一个取余运算符
(不是模算符)。
取余运算符 %(使用 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;
}
如果有人正在寻找一个真正的取模函数(总是获取除数的符号),可以使用以下代码:
function Modulo(num, denom)
{
if (num%denom >= 0)
{
return Math.abs(num%denom);
}
else
{
return num%denom + denom;
}
}
取模(%)运算符返回余数。
如果其中一个值是字符串,则尝试将字符串转换为数字。
alert(5%3)
将弹出 2
%作为模运算符,返回除法余数。例如:
<script>
var x = 5;
var y = 2;
var z = x % y;
alert(z);
</script>
这将会弹出1的警告。
如果给定 k > 0,这就是我会用来 getModulus
的方法。我认为在 js 中使用 Math.floor(num / k )
更直观,因为它与 python 中的 num // k
完全相同。
function getModulus(num, k) {
return num - Math.floor(num / k ) * k
}
31 - (((((5 * 2017) / 4) + 4) % 7)) == 25.75 // 不是有效日期 31 - (~~((((5 * 2017) / 4) + 4) % 7)) == 26 // 正确
- Jesper Jensen