【发布时间】:2012-02-12 14:42:13
【问题描述】:
% 在 JavaScript 中有什么作用?
非常感谢它是什么以及它的作用的定义。
【问题讨论】:
标签: javascript
% 在 JavaScript 中有什么作用?
非常感谢它是什么以及它的作用的定义。
【问题讨论】:
标签: javascript
这是一个 modulo operator。有关 JavaScript 算术运算符的更多信息,请参阅此 documentation 或 the specification。
%(模数)
取模运算符的用法如下:
var1 % var2
模运算符返回第一个操作数模第二个 操作数,即 var1 模 var2,在前面的语句中,其中 var1 和 var2 是变量。模函数是整数 var1 除以 var2 的余数。例如,12 % 5 返回 2。 结果将与 var1 具有相同的符号;也就是说,-1 % 2 返回 -1。
【讨论】:
31 - (((((5 * 2017) / 4) + 4) % 7)) == 25.75 // Not a valid date 31 - (~~((((5 * 2017) / 4) + 4) % 7)) == 26 // Correct
ES6 更新:
正如其他答案中所解释的,它在将被除数除以除数后返回余数,但这不再是模运算符,这是remainder operator. 不同之处在于模运算符结果将采用符号除数,而不是除数。引自MDN
余数运算符返回一个操作数除以第二个操作数时的余数。 它总是取除数的符号,而不是除数。它使用内置的模函数来生成结果,即
var1除以var2的整数余数——例如——var1 modulo var2。 There is a proposal to get an actual modulo operator in a future version of ECMAScript,不同之处在于模运算符结果将采用除数的符号,而不是被除数。
示例:
-10 % 3 // -1
10 % -3 // 1
【讨论】:
它返回除法运算的余数。 5%2 返回1
【讨论】:
它是一个模运算符。
它计算余数。
如果我们做 23 % 10,
首先,我们将 23 除以 10,等于 2.3
然后取 .3 *(除数)10
= 3
【讨论】:
【讨论】:
以防万一,如果有人正在寻找一个真正的模函数(它总是会得到除数的符号),你可以使用这个:
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。
【讨论】:
模数 (%) 运算符返回余数。
如果任一值是字符串,则尝试将字符串转换为数字。
alert(5%3) 会提醒2
【讨论】:
在 JavaScript 中,% 是 remainder operator(不是模运算符)。
余数运算符 %(使用 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;
}
【讨论】:
% 执行模运算符,返回除法提示。示例:
<script>
var x = 5;
var y = 2;
var z = x % y;
alert(z);
</script>
这将提醒 1。
【讨论】: