Остаток от деления в JavaScript

Оператор % возвращает остаток от деления одного числа на другое.

console.log(10 % 3);

Результат:

1

Число 10 можно разделить на 3 три раза. Получится 9, а в остатке останется 1.

Как работает оператор %

Оператор % не показывает результат деления. Он показывает только то, что осталось после деления.

console.log(10 / 3);
console.log(10 % 3);

Результат:

3.3333333333333335
1

В первом случае мы делим число и получаем дробный результат. Во втором случае берем только остаток.

Еще несколько примеров:

console.log(8 % 2);
console.log(9 % 2);
console.log(15 % 4);

Результат:

0
1
3

Деление без остатка

Если остаток равен 0, значит число делится нацело.

let number = 12;

if (number % 3 === 0) {
  console.log('Делится без остатка');
}

Такую проверку удобно использовать, когда нужно понять, можно ли разделить количество на равные части.

let apples = 10;
let boxes = 5;

if (apples % boxes === 0) {
  console.log('Яблоки можно разложить поровну');
}

Четные и нечетные числа

Четное число делится на 2 без остатка.

let number = 8;

console.log(number % 2 === 0);

Результат:

true

Если остаток не равен 0, число нечетное.

let number = 7;

if (number % 2 !== 0) {
  console.log('Нечетное число');
}

Повторение по кругу

Остаток от деления часто используют, когда значение должно повторяться по кругу.

Например, есть три цвета. Нужно выбирать следующий цвет по номеру элемента.

let colors = ['red', 'green', 'blue'];

for (let index = 0; index < 6; index++) {
  let colorIndex = index % colors.length;

  console.log(colors[colorIndex]);
}

Результат:

red
green
blue
red
green
blue

Когда index доходит до 3, выражение 3 % 3 возвращает 0. Поэтому выбор снова начинается с первого элемента массива.

Отрицательные числа

С отрицательными числами результат может выглядеть непривычно.

console.log(-5 % 2);
console.log(5 % 2);

Результат:

-1
1

В JavaScript знак остатка зависит от первого числа. Если первое число отрицательное, остаток тоже может быть отрицательным.

Если в задаче нужен всегда положительный индекс, например для массива, это нужно учитывать отдельно.

let length = 3;
let index = -1;

let safeIndex = ((index % length) + length) % length;

console.log(safeIndex);

Результат:

2

Такая запись сначала убирает лишние круги, потом сдвигает отрицательный результат в положительный диапазон.

Итого

Оператор % возвращает остаток от деления.

  • 10 % 3 возвращает 1.
  • Если остаток равен 0, число делится без остатка.
  • number % 2 === 0 проверяет четное число.
  • Остаток удобно использовать для повторения значений по кругу.
  • С отрицательными числами остаток может быть отрицательным.