Уроки по веб-разработке

JavaScript. Остаток от деления и деление без остатка

В этом посте мы рассмотрим как получить остаток и целое от деления в JS.

Остаток от деления (деление по модулю)

Чтобы получить остаток от деления мы можем воспользоваться оператором %

console.log(20 % 3) // 2 (3 * 6 = 18)

Как видно из примера, мы получим 2 — это и будет остаток от деления.

Где такое может понадобиться? Как пример, если в цикле вы будете генерировать строки таблицы и каждую 3 строку вам нужно будет стилизовать:

for (let i = 0; i < tableRows.length; i++) {
    ...
    // Если на данной итерации счетчик i делится на 3 без остатка (т.е. деление равно 0)
    // Тогда в этом условии мы можем сделать необходимые операции
    if (i % 3 === 0) {
        ...
    }
}

В данном примере показана каждая третья строка, но можно также сделать и с другим числом:

if (i % 2 === 0) — каждая вторая строка
if (i % 5 === 0) — каждая пятая строка
if (i % 10 === 0) — каждая 10я строка и т.д.

Другой пример, когда вам нужно проверить делимость числа например на 10 и 100 без остатка:

if (num % 10 === 0 && num % 100 === 0) {...}

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

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

Первый вариант, наиболее очевидный, это округление числа после операции деления:

let num1 = 10, num2 = 3;

console.log(Math.floor(num1/num2)); // 3 (округление в меньшую сторону)
console.log(Math.ceil(num1/num2)); // 4 (округление в большую сторону)
console.log(Math.round(num1/num2)); // 3 (математическое округление)
console.log(+(num1/num2).toFixed(0)); // 3 (математическое округление)
console.log(parseInt((num1/num2))); // 3 (приведение к числу, будет отброшена дробная часть)

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

Еще один вариант, предложенный пользователем в комментариях:

console.log(~~(10/3)) // 3 

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

let num1 = 10, num2 = 3;

console.log((num1/num2) | 0); // 3
console.log((num1/num2) >> 0); // 3

Задача. Функция для определения простого числа

Давайте теперь на примере посмотрим, как можно использовать остаток от деления для решения такой задачи. Простое число: это положительное число, которое делиться только на самого себя и на 1.

Итак, напишем функцию, которая на вход принимает какое-то число, дальше в цикле начиная с 2 (т.к. на единицу итак все делиться), пока счетчик меньше передаваемого числа, проверяем будет ли num делиться без остатка. Если делиться, значит num не является простым числом:

function isPrime(num) {
  for (let i = 2; i < num; i++) {
    if (num % i === 0) {
      return false;
    }
  }

  return num > 1;
}

console.log(isPrime(1)); // false
console.log(isPrime(2)); // true
console.log(isPrime(3)); // true
console.log(isPrime(4)); // false
console.log(isPrime(5)); // true