JavaScript 余数/模(%)
示例
余数/模运算符(%)返回(整数)除法后的余数。
console.log( 42 % 10); //2 console.log( 42 % -10); //2 console.log(-42 % 10); //-2 console.log(-42 % -10); //-2 console.log(-40 % 10); //-0 console.log( 40 % 10); //0
当一个操作数除以第二个操作数时,此运算符返回剩余的余数。当第一个操作数为负值时,返回值将始终为负,反之亦然。
在上面的示例中,在没有足够的余量可以再次减去之前,10可以将其减去四次42而无需更改符号。因此,其余为:42-4*10=2。
余数运算符可能对以下问题有用:
测试一个整数是否可被另一个数字整除:
x%4==0//如果x可被4整除,则为true
x%2==0//如果x是偶数,则为true
x%2!=0//如果x为奇数,则为true
因为0===-0,这也适用x<=-0。
在[0,n)间隔内实现值的循环递增/递减。
假设我们需要将整数值从递增0(但不包括在内)n,因此aftern-1成为下一个值0。这可以通过以下伪代码完成:
var n = ...; //给定n var i = 0; function inc() { i = (i + 1) % n; } while (true) { inc(); //跟我更新 }
现在,对上述问题进行一般化,并假设我们需要允许将该值从0to递增和递减(不包括)n,因此,n-1成为之后的下一个值0和0成为之前的前一个值n-1。
var n = ...; //给定n var i = 0; function delta(d) { //d-任何有符号整数 i = (i + d + n) % n; //我们将n加到(i+d)以确保总和为正 }
现在我们可以调用delta()传递正整数和负整数的任何整数作为delta参数的函数。
使用模数获得数字的小数部分
var myNum = 10 / 4; //2.5 var fraction = myNum % 1; //0.5 myNum = -20 / 7; //-2.857142857142857 fraction = myNum % 1; //-0.857142857142857