HOWTO · JavaScript

Operador de Módulo(%) em JavaScript

Este tutorial ensina como usar o operador de módulo(%) em JavaScript.

Nesta página

O operador % do JavaScript retorna o resto da divisão. Para valores positivos, esse resultado costuma coincidir com o que se chama de módulo, mas a diferença fica clara quando o dividendo é negativo: no JavaScript, o resto tem o mesmo sinal do dividendo. Este guia apresenta a sintaxe, os casos numéricos especiais e alguns usos comuns.

O que o operador % do JavaScript retorna

Para números finitos, a % b retorna o resto depois que o quociente a / b é truncado em direção a zero. Em 10 % 3, o quociente é 3 e o resto é 1. O resultado segue o sinal do dividendo (a), então -10 % 3 é -1. Essa regra de sinal explica por que % no JavaScript é um operador de resto e não produz sempre o resultado não negativo do módulo matemático.

Sintaxe e exemplos básicos

Escreva o dividendo, % e, em seguida, o divisor: dividend % divisor. O operador aceita operandos numéricos, inclusive frações. Na expressão, o valor à esquerda é dividido pelo valor à direita, e o resultado é um número que seu código pode armazenar, comparar ou usar em outro cálculo. O exemplo atribui cada resultado a uma constante nomeada e envia os dois valores ao console:

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

O primeiro resultado é 1; o segundo é 1.5, porque 2 cabe duas vezes em 5.5, sobrando 1.5. A execução fornecida confirma esses dois resultados: 1 e 1.5.

Números negativos e casos extremos

O resto tem o mesmo sinal do dividendo: 10 % 3 é 1, -10 % 3 é -1 e 10 % -3 é 1. Uma divisão exata com dividendo negativo pode produzir zero negativo, como em -4 % 2; use Object.is(-4 % 2, -0) para compará-lo quando o sinal do zero for relevante.

O JavaScript retorna NaN se qualquer um dos operandos for NaN, se o dividendo for infinito ou se o divisor for 0 ou -0. Se o dividendo for finito e o divisor for infinito, o resultado é o próprio dividendo; por isso, 5 % Infinity é 5. Esses resultados decorrem da semântica numérica de resto do JavaScript; não foram observados em uma execução fornecida neste pacote.

Usos comuns do operador %

Para entradas inteiras, verifique a paridade com n % 2 === 0 para números pares e n % 2 !== 0 para ímpares. Isso também funciona com inteiros negativos, pois seus restos são 0 ou -1. Se a entrada puder ser uma fração ou uma string numérica, valide-a ou normalize-a antes de usar uma verificação de paridade para inteiros.

Para um número finito, value % 1 fornece o resto fracionário com sinal. Por exemplo, 5.5 % 1 é 0.5, enquanto -5.5 % 1 é -0.5. Para obter uma parte fracionária positiva de valores negativos, escolha uma regra explícita de normalização em vez de presumir que % 1 sempre será não negativo.

Para uma quantidade não negativa e inteira de minutos, hours = Math.floor(minutes / 60) e remainingMinutes = minutes % 60 separam o valor em horas e minutos. Por exemplo, 135 minutos correspondem a 2 horas e 15 minutos.

Para executar uma ação a cada três iterações de um loop, teste i % 3 === 0. Para alternar entre dois elementos de um array, use (round - 1) % players.length quando round começar em 1; subtrair um faz com que o primeiro turno use o índice 0. Esses padrões pressupõem, respectivamente, um intervalo positivo ou um array não vazio.

Resto e módulo matemático

O módulo matemático costuma retornar um valor de 0 até, mas sem incluir, um módulo positivo. Já % no JavaScript mantém o sinal do dividendo; por isso, -10 % 3 é -1. Para um módulo finito e positivo n, a expressão ((a % n) + n) % n normaliza um valor finito a para um resultado não negativo no estilo do módulo. Por exemplo, com módulo 3, ela transforma -10 em 2. Deixe explícita a condição de módulo positivo: esse padrão não substitui % de forma geral para divisores arbitrários.