取余(%)

当一个操作数除以第二个操作数时,取余运算符(%)返回剩余的余数。它总是与被除数的符号保持一致。

尝试一下

语法

x % y

描述

对于运算:n %d,其中 n 被称为被除数,d 被称为除数。如果其中的任意一个操作数为 NaN,或 n 为正负无穷(±Infinity),又或者 d 为 ±0,则该运算返回 NaN。否则,如果 d 为正负无穷(±Infinity),或 n 为 ±0,则返回被除数 n

如果两个操作数都非零且有限(非正负无穷)时,余数 r 将通过 r := n - d * q 计算获得,其中 q 是一个使得 r 与被除数 n 具有相同符号,并且会使 r 尽可能地接近于 0 的整数。

请注意,虽然在大多数语言中,% 是取余运算符,但在某些语言(例如:Python 和 Perl)中,它是取模运算符。取模运算被定义为 k := n - d * q,其中 q 是一个使得 k 与除数具有相同符号,并且会使 k 尽可能地接近于 0 的整数。对于同号的两根操作数,两者是等价的,但在操作数具有不同的符号时,取模运算的结果总是与除数同号,而取余运算则是余数与被除数同号,d 的符号即可使两者的结果不相同。为了在 Javascript 中使用 n % d 实现取模运算,可以使用 ((n % d) + d) % d。在 JavaScript 中,模运算(没有专用的运算符)用于规范化按位移位运算符(<<>>,等等)的第二个操作数,以使得偏移量始终为一个正数。

示例

被除数为正数

 13 % 5  //  3
 1 % -2 //  1
 1 % 2  //  1
 2 % 3  //  2
5.5 % 2 // 1.5

被除数为负数

-13 % 5 // -3
-1 % 2  // -1
-4 % 2  // -0

被除数为 NaN

NaN % 2 // NaN

被除数为 Infinity

Infinity % 2 // NaN
Infinity % 0 // NaN
Infinity % Infinity // NaN
2 % Infinity // 2
0 % Infinity // 0

规范

Specification
ECMAScript Language Specification
# sec-multiplicative-operators

浏览器兼容性

BCD tables only load in the browser

参见