Перейти к содержимому
Тема 4 из 16
Теория

Математика и сравнение

Зачем это нужно

Почти любая программа что-то считает: сумму заказа, время до конца урока, очки в игре, проценты скидки. А ещё программы постоянно сравнивают: хватает ли денег, правильный ли пароль, кончилось ли время. В этой теме — все инструменты для этого.

Арифметика

console.log(7 + 2);   // 9   сложение
console.log(7 - 2);   // 5   вычитание
console.log(7 * 2);   // 14  умножение
console.log(7 / 2);   // 3.5 деление — дробное!
console.log(7 % 2);   // 1   остаток от деления
console.log(2 ** 10); // 1024 степень

Порядок действий — как в математике: сначала **, потом *, /, %, потом + и -. Скобки меняют порядок: (2 + 3) * 4 → 20, а 2 + 3 * 4 → 14.

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

Очень полезный оператор:

  • n % 2 === 0 — число чётное;
  • n % 10 — последняя цифра числа (1234 % 10 → 4);
  • total % 60 — сколько минут остаётся сверх полных часов.
const seconds = 200;
console.log(Math.floor(seconds / 60), "мин", seconds % 60, "сек");

Вывод:

3 мин 20 сек

Объект Math

Math — встроенный набор математических функций:

console.log(Math.round(4.5));  // 5   по обычным правилам
console.log(Math.floor(4.9));  // 4   вниз
console.log(Math.ceil(4.1));   // 5   вверх
console.log(Math.trunc(-4.7)); // -4  отбросить дробную часть
console.log(Math.max(3, 9, 2)); // 9
console.log(Math.min(3, 9, 2)); // 2
console.log(Math.abs(-8));     // 8   модуль
console.log(Math.sqrt(81));    // 9   квадратный корень
console.log(Math.random());    // случайное от 0 до 1, например 0.4271…

Случайное целое от 1 до 6 (кубик): Math.floor(Math.random() * 6) + 1.

Дроби и точность

console.log(0.1 + 0.2);

Вывод:

0.30000000000000004

Это не ошибка JavaScript — так хранят дроби почти все языки. Для денег считают в копейках (целыми) или округляют результат: Number((0.1 + 0.2).toFixed(2)) → 0.3. Метод toFixed(2) возвращает строку с двумя знаками после точки.

Сравнение

Результат сравнения — логическое значение true или false:

console.log(5 > 3);    // true
console.log(5 < 3);    // false
console.log(5 >= 5);   // true  больше или равно
console.log(4 <= 3);   // false меньше или равно
console.log(5 === 5);  // true  строго равно
console.log(5 !== 3);  // true  не равно

Строгое === и нестрогое ==

console.log(5 === "5"); // false — разные типы
console.log(5 == "5");  // true  — == сначала приводит типы
console.log(0 == "");   // true  — сюрприз!

== пытается привести значения к одному типу и даёт странные результаты. Всегда используй === и !==.

Строки сравниваются по алфавиту, точнее по кодам символов: "apple" < "banana" → true, а "Z" < "a" → true, потому что заглавные буквы идут раньше строчных.

Как это работает внутри

Все числа в JavaScript хранятся в одном формате — 64-битной дроби (стандарт IEEE 754). Поэтому 7 / 2 даёт 3.5, а не 3, как в некоторых других языках, и поэтому 0.1 + 0.2 чуть-чуть не равно 0.3: десятичную дробь 0.1 нельзя точно записать в двоичной системе, как 1/3 нельзя точно записать десятичной дробью. Деление на ноль не ломает программу: 5 / 0 → Infinity.

Частые ошибки

  1. Ждать целого от деления. 7 / 2 → 3.5. Нужно целое — Math.floor(7 / 2).
  2. = вместо ===. if (x = 5) не сравнивает, а присваивает. Сравнение — ===.
  3. == вместо ===. 0 == "" → true. Пиши ===.
  4. Округление не той функцией. Math.round — по правилам, Math.floor — вниз, Math.ceil — вверх. Для «сколько коробок нужно» — ceil, для «сколько полных часов» — floor.
  5. toFixed возвращает строку. (1.5).toFixed(2) + 1 → "1.501". Оберни в Number(...).

Шпаргалка

Что Как
Действия + - * / % **
Остаток, чётность n % 2 === 0
Округления Math.round, Math.floor, Math.ceil, Math.trunc
Максимум / минимум Math.max(a, b), Math.min(a, b)
Модуль, корень Math.abs(x), Math.sqrt(x)
Случайное Math.random() — от 0 до 1
Знаков после точки x.toFixed(2) → строка
Сравнение > < >= <= === !==

Часы и минуты

Лёгкая+10 XP

Фильм идёт minutes = 135 минут. Создай:

  • hours — сколько полных часов (2);
  • rest — сколько минут остаётся сверх полных часов (15).

Вычисляй через minutes, а не вписывай ответы.

Подключи коннектор, чтобы решать задачи

Код задач выполняется на твоём компьютере — так быстрее и надёжнее, чем в браузере. Для этого нужна бесплатная программа-коннектор CodeWithMe. Подключить её нужно один раз.

Ищем коннектор на этом компьютере…

  1. 1
    Скачай коннектор для своей системы (Windows, macOS или Linux).Скачать коннекторНа странице загрузки выбери файл со своей системой в названии, например windows-amd64.
  2. 2Запусти его и выбери папку, где будут лежать твои решения. Python и Node.js он поставит туда сам, когда понадобится.
  3. 3
    Введи ниже код из 6 цифр — он написан в окне коннектора («Код для сайта CodeWithMe»). Если браузер спросит про доступ к локальной сети — разреши.

Коннектор открытый (исходный код на GitHub), работает только на твоём компьютере и выполняет код лишь после ввода кода сопряжения.