Содержание
В этом посте мы рассмотрим как получить остаток и целое от деления в 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