Javascript как найти остаток от деления

Содержание

  • 1 Остаток от деления (деление по модулю)
  • 2 Деление без остатка
  • 3 Задача. Функция для определения простого числа

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

Ваши вопросы и комментарии:

по сей день актуален для многих новичков вопрос!
формула по теореме такая: a = b*c +r
где:

  • a – делимое (что делим)
  • b – делитель (на что делим)
  • с – целое число до запятой от результата деления (поэтому в случае a<b всегда будет 0 ноль)
  • r – то, что нужно прибавить, чтобы формула наша сошлась (тот самый измученный нами “остаток”! :))

Например, если мы хотим увидеть остаток от деления a=1 на b=6:

1 = 6*c + r
(с = 1/6=0,###)

поэтому

1 = 6*0 + r
r = 1 - 0 = 1
a%b=1

Второй пример когда a>b,
a=8, b=3:

8 = 3*с + r
(с = 8/3=2,###)

поэтому

8 = 3*2 + r
r = 8 - 6 = 2
a%b=2

Этот самый расчудесный остаток % при условии a<b может использоваться, например, в коде js для универсальных циклов с массивами (таких как зацикленные слайдеры и т.п., где количество элементов в массиве может изменяться и не должно влиять на исполняемый код)

JavaScript calculates right the floor of negative numbers and the remainder of non-integer numbers, following the mathematical definitions for them.

FLOOR is defined as “the largest integer number smaller than the parameter”, thus:

  • positive numbers: FLOOR(X)=integer part of X;
  • negative numbers: FLOOR(X)=integer part of X minus 1 (because it must be SMALLER than the parameter, i.e., more negative!)

REMAINDER is defined as the “left over” of a division (Euclidean arithmetic). When the dividend is not an integer, the quotient is usually also not an integer, i.e., there is no remainder, but if the quotient is forced to be an integer (and that’s what happens when someone tries to get the remainder or modulus of a floating-point number), there will be a non-integer “left over”, obviously.

JavaScript does calculate everything as expected, so the programmer must be careful to ask the proper questions (and people should be careful to answer what is asked!) Yarin’s first question was NOT “what is the integer division of X by Y”, but, instead, “the WHOLE number of times a given integer GOES INTO another”. For positive numbers, the answer is the same for both, but not for negative numbers, because the integer division (dividend by divisor) will be -1 smaller than the times a number (divisor) “goes into” another (dividend). In other words, FLOOR will return the correct answer for an integer division of a negative number, but Yarin didn’t ask that!

gammax answered correctly, that code works as asked by Yarin. On the other hand, Samuel is wrong, he didn’t do the maths, I guess, or he would have seen that it does work (also, he didn’t say what was the divisor of his example, but I hope it was 3):

Remainder = X % Y = -100 % 3 = -1

GoesInto = (X – Remainder) / Y = (-100 – -1) / 3 = -99 / 3 = -33

By the way, I tested the code on Firefox 27.0.1, it worked as expected, with positive and negative numbers and also with non-integer values, both for dividend and divisor. Example:

-100.34 / 3.57: GoesInto = -28, Remainder = -0.3800000000000079

Yes, I noticed, there is a precision problem there, but I didn’t had time to check it (I don’t know if it’s a problem with Firefox, Windows 7 or with my CPU’s FPU). For Yarin’s question, though, which only involves integers, the gammax’s code works perfectly.

JavaScript Урок № 4 (операторы)

Для тех кто любит слушать и смотреть, в конце урока видео.

Основные операторы

  • Арифметические операторы

+, -, *, /, %, ++, —

  • Логические операторы

&&, ||, !

  • Операторы сравнения

==, !=, ===, !==, >, >=, <, <=

Теперь давайте разберемся в терминах:

  • «унарный»
  • «бинарный»
  • «операнд»

Операнд – то, к чему применяется оператор. Например, в умножении 10 * 5 есть два операнда: левый операнд равен 10, а правый операнд равен 5. Иногда их называют «аргументами» вместо «операндов».

Бинарным – называется оператор, который применяется к двум операндам.

Унарным – называется оператор, который применяется к одному операнду.

Математические операторы

  1. Сложение. Бинарный плюс: +
  2. Оператор + «склеивает» строки, при этом если хотя бы один аргумент является строкой, то второй будет также преобразован к строке!
  3. Вычитание. Бинарный минус: –
  4. Умножение *
  5. Деление /

унарный плюс + и унарный минус

Унарный, то есть применённый к одному значению. Плюс + или минус – ничего не делают с числами, но если операнд не число, унарные операторы преобразует его в число.

let str = “1”

Выведите переменную str в консоль вместе с typeof и вы поймете разницу

console.log( typeof(str)) – результатом будет string

console.log( typeof(+str)) – результатом будет number

Взятие остатка %

Оператор взятия остатка % интересен тем, что, несмотря на обозначение, никакого отношения к процентам не имеет.

Его результат a % b – это остаток от деления a на b.

Выведите нижеуказанные алерты и вы увидите результат работы %

alert( 5 % 2 ) – 1, остаток от деления 5 на 2

alert( 8 % 3 ) – 2, остаток от деления 8 на 3

alert( 6 % 3 ) – 0, остаток от деления 6 на 3

Побитовые операторы

  • && – и
  • || – или
  • ^ – XOR(побитовое исключающее или)
  • ~ – NOT (не)
  • << – LEFT SHIFT(левый сдвиг)
  • >> – RIGHT SHIFT(правый сдвиг)
  • >>> – ZERO-FILL RIGHT SHIFT(правый сдвиг с заполнением нулями)

Данные операторы используются в функциях и конструкциях if-else, switch-case. Об этом мы поговорим позже.

Операторы сравнения и логические значения

Многие операторы сравнения знакомы нам из математики:

  • Больше/меньше: a > b, a < b.
  • Больше или равно/меньше или равно: a >= b, a <= b.
  • Равно a == b. Для сравнения используется два символа равенства ‘=’. Один символ a = b означал бы присваивание.
  • «Не равно». В математике он пишется как , в JavaScript – знак равенства с восклицательным знаком перед ним !=

Существует всего два логических значения:

true – имеет смысл «да», «верно», «истина».

false – означает «нет», «неверно», «ложь».

Пример:

alert( 2 > 1 ) – true, верно

alert( 2 == 1 ) – false, неверно

Инкремент и декремент: ++, —

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

Для этого существуют даже специальные операторы:

Инкремент: ++ увеличивает на 1.

Пример:

let i = 2

i++; // короткая запись для i= i+ 1

alert(i) выведет 3

Декремент: уменьшает на 1.

Пример:

let i = 2

i– // короткая запись для i = i – 1.

alert(i) выведет 1

Теперь давайте потренируемся на задачах

1. Переделайте указанный код с использованием операторов +=, -=, *=, /=, ++, —. Выведите результат на экран с помощью метода alert();

let num = 1;

num = num + 12;

num = num – 14;

num = num * 5;

num = num / 7;

2. Создайте переменные string_1=’Привет, ‘ и string_2=’Медвед’. Используя эти переменные и операции сложения выведите на экран предложение ‘Привет, Медвед!’.

3. Найти остаток от деления 10 / 3 c помощью оператора %.

Функция prompt

prompt, выдает окошко с текстом, а также позволяет получить от пользователя какой-либо текст.

Этот текст можно записать в переменную и затем выполнить над ним какие-либо операции.

let name = prompt(‘Ваше имя?’);

alert(‘Ваше имя: ‘+ name);

Еще задачи

1. Переделайте этот код так, чтобы в нем использовались операции +=, -=, *=, /=.

let num = 47;

num = num + 7;

num = num 18;

num = num * 10;

2. Переделайте этот код с использованием операции ++ и .

let num = 10;

num = num + 1;

num = num 1;

5. Создайте переменную age она должна ровняться вашему возрасту. Выведите на экран ‘Мне %столько то лет% лет!’.

6. Спросите имя с помощью prompt. С помощью alert выведите сообщение ‘Ваше имя %имя%’.

Видео :

  1. Получите частное и остаток от целочисленного деления с помощью библиотеки Math в JavaScript
  2. Получите частное и остаток от целочисленного деления с помощью побитовых операторов в JavaScript

Целочисленное деление в JavaScript

В этом руководстве будет обсуждаться, как получить частное и остаток от деления с помощью библиотеки Math и побитовых операторов в JavaScript.

Получите частное и остаток от целочисленного деления с помощью библиотеки Math в JavaScript

В JavaScript мы можем легко разделить две переменные, и результат будет в виде чисел с плавающей запятой, но если мы хотим получить частное и остаток от деления, мы можем использовать библиотеку Math, предоставляющую нам множество функций. . Например, мы можем получить частное от деления с помощью функции Math.floor() или Math.trunc(), которая преобразует число с плавающей запятой в целое число, а чтобы получить остаток, мы можем использовать % персонаж. Например, давайте найдем частное и остаток от 13, разделенного на 5. См. Код ниже.

var a = 13;
var b = 5;
var quo = Math.floor(a/b);
var rem = a%b;
console.log('Quotient = ',quo,'Remainder = ',rem);

Выход:

Quotient =  2 Remainder =  3

Обратите внимание, что библиотека Math выйдет из строя, если числа будут слишком большими. Вы также можете использовать функцию Math.trunc(), которая может обрабатывать большие числа по сравнению с функцией Math.floor(). Функция Math.floor() не сработает в случае отрицательных чисел, но Math.trunc() не выйдет из строя в случае отрицательных чисел.

Получите частное и остаток от целочисленного деления с помощью побитовых операторов в JavaScript

В JavaScript мы можем получить частное и остаток от деления с помощью побитовых операторов. Например, мы можем получить частное от деления, используя побитовое NOT ~~ или побитовое OR |0, которое преобразует число с плавающей запятой в целое. А чтобы получить остаток, мы можем использовать символ %. Например, давайте найдем частное и остаток от 13, разделенного на 5. См. Код ниже.

var a = 13;
var b = 5;
var quo = ~~(a/b);
var rem = a%b;
console.log('Quotient = ',quo,'Remainder = ',rem);

Выход:

Quotient =  2 Remainder =  3

Как видите, результат такой же, как и у описанного выше метода. Производительность поразрядных операторов выше по сравнению с библиотекой Math, но способность обрабатывать большие числа меньше. Итак, если у вас маленькие числа, вы можете использовать побитовые операторы; в противном случае используйте библиотеку Math. Побитовые операторы также могут обрабатывать отрицательные числа. Вы также можете использовать функцию parseInt() для преобразования числа с плавающей запятой в целое число. Если вы не хотите использовать какие-либо функции, вы можете использовать простую формулу с оператором остатка %, как показано ниже.

var a = 13;
var b = 5;
var rem = a%b;
var quo = (a-rem)/b;
console.log('Quotient = ',quo,'Remainder = ',rem);

Выход:

Quotient =  2 Remainder =  3

Как видите, результат такой же, как и у описанных выше методов.

Добавить комментарий