HOWTO · JavaScript

Operador de módulo(%) en JavaScript

Este tutorial enseña cómo usar el operador de módulo(%) en JavaScript.

En esta página

El operador % de JavaScript devuelve el resto de una división. Con valores positivos, suele coincidir con lo que se denomina módulo, pero la diferencia se aprecia con dividendos negativos: el resto de JavaScript tiene el mismo signo que el dividendo. En esta guía se explican la sintaxis, los casos numéricos especiales y algunos usos habituales.

Qué devuelve el operador % de JavaScript

Con números finitos, a % b devuelve el resto después de truncar el cociente a / b hacia cero. En 10 % 3, el cociente es 3 y el resto es 1. El resultado conserva el signo del dividendo (a), por lo que -10 % 3 es -1. Por esta regla de signo, JavaScript % es un operador de resto y no siempre produce el resultado no negativo del módulo matemático.

Sintaxis y ejemplos básicos

Escribe el dividendo, % y luego el divisor: dividend % divisor. El operador acepta operandos numéricos, incluidas las fracciones. En la expresión, el valor de la izquierda se divide entre el de la derecha, y el resultado es un número que el código puede guardar, comparar o usar en otro cálculo. El ejemplo asigna cada resultado a una constante con nombre y muestra ambos valores en la consola:

const wholeRemainder = 10 % 3;
const fractionalRemainder = 5.5 % 2;
console.log(wholeRemainder);
console.log(fractionalRemainder);

El primer resultado es 1; el segundo es 1.5, porque 2 cabe dos veces en 5.5 y sobran 1.5. La ejecución proporcionada confirma estos dos resultados: 1 y 1.5.

Números negativos y casos límite

El resto tiene el mismo signo que el dividendo: 10 % 3 es 1, -10 % 3 es -1 y 10 % -3 es 1. Una división exacta de un número negativo puede producir cero negativo, como en -4 % 2; puedes compararlo con Object.is(-4 % 2, -0) si importa el signo del cero.

JavaScript devuelve NaN si alguno de los operandos es NaN, si el dividendo es infinito o si el divisor es 0 o -0. Si el dividendo es finito y el divisor es infinito, devuelve el dividendo sin cambios; por ejemplo, 5 % Infinity es 5. Estos resultados se derivan de la semántica numérica del operador de resto de JavaScript; el paquete no proporciona una ejecución que los haya observado.

Usos habituales del operador %

Con valores enteros, puedes comprobar la paridad con n % 2 === 0 para saber si un número es par y con n % 2 !== 0 para saber si es impar. También funciona con enteros negativos, porque sus restos son 0 o -1. Si la entrada puede ser una fracción o una cadena numérica, valídala o normalízala antes de aplicar una comprobación de paridad para enteros.

Para un número finito, value % 1 da el resto fraccionario con signo. Por ejemplo, 5.5 % 1 es 0.5, mientras que -5.5 % 1 es -0.5. Para obtener una parte fraccionaria positiva cuando el valor es negativo, elige una regla de normalización explícita; no des por hecho que % 1 siempre devuelve un valor no negativo.

Para convertir una cantidad no negativa de minutos enteros en horas y minutos, hours = Math.floor(minutes / 60) y remainingMinutes = minutes % 60 separan ambas unidades. Por ejemplo, 135 minutos equivalen a 2 horas y 15 minutos.

Para ejecutar una acción cada tres iteraciones de un bucle, comprueba i % 3 === 0. Para alternar entre dos elementos de un arreglo, usa (round - 1) % players.length si round empieza en 1; restar uno hace que el primer turno use el índice 0. Estos patrones presuponen, respectivamente, un intervalo positivo o un arreglo no vacío.

Resto y módulo matemático

El módulo matemático suele devolver un valor desde 0 hasta un valor menor que un módulo positivo. En cambio, JavaScript % conserva el signo del dividendo, así que -10 % 3 es -1. Si el módulo n es finito y positivo, la expresión ((a % n) + n) % n normaliza un valor finito de a para obtener un resultado no negativo, al estilo del módulo. Por ejemplo, con módulo 3, transforma -10 en 2. Deja explícita la condición de que el módulo sea positivo: este patrón no sustituye de forma general a % con divisores arbitrarios.