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

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

Технический фундамент вычислений

Арифметика в прикладном коде требует дисциплины входных данных:

  • числовые операции корректны только после нормализации типов;
  • деление, остаток и округление имеют edge-case поведение;
  • ошибки преобразования (NaN) должны обрабатываться явно;
  • граничные значения (0, отрицательные, большие числа) нужно проверять отдельно.

Корректная арифметика — это не только формула, но и контроль входа/выхода вычислений.

Почему арифметика в JS важна даже в "обычном" интерфейсе

Арифметические операторы участвуют почти в каждой продуктовой задаче: расчет цены, скидки, прогресса, пагинации, рейтинга, таймера. Даже если ты не пишешь "математический" сервис, без точных вычислений UI быстро становится недостоверным.

Ключевой момент: арифметика в JavaScript работает с типом number, и важно контролировать входные данные перед вычислением.

Проверь себя: почему строка '100' в вычислениях может привести к неожиданному результату?

Базовые арифметические операторы

  • + сложение;
  • - вычитание;
  • * умножение;
  • / деление;
  • % остаток от деления;
  • ** возведение в степень.
const a = 12;
const b = 5;

console.log(a + b); // 17
console.log(a - b); // 7
console.log(a * b); // 60
console.log(a / b); // 2.4
console.log(a % b); // 2

Смотри, что важно: / часто дает дробь, даже если числа целые.

+ и строки: частая ловушка

Оператор + умеет и складывать числа, и склеивать строки.

console.log(10 + 5); // 15
console.log('10' + 5); // '105'

Здесь часто путаются: если хотя бы один операнд строка, + переходит в конкатенацию.

Анти-провал: для пользовательского ввода сначала делай Number(value).

Деление на ноль и NaN

console.log(10 / 0); // Infinity
console.log(0 / 0); // NaN

Это валидные значения JavaScript, но для бизнес-логики обычно нежелательные. Их нужно обрабатывать явно.

Проверь себя: какую проверку ты добавишь перед делением, чтобы избежать Infinity?

Мини-сценарий: цена со скидкой

const rawPrice = '2000';
const rawDiscount = '15';

const price = Number(rawPrice);
const discount = Number(rawDiscount);

if (Number.isNaN(price) || Number.isNaN(discount)) {
  console.log('Некорректные данные');
} else {
  const finalPrice = price - (price * discount) / 100;
  console.log(finalPrice);
}

Это практичный паттерн: нормализация -> проверка -> вычисление.

Смотри, что важно: Number('') и Number(' ') превращаются в 0. Для форм ввода это часто неверно по смыслу, поэтому пустые строки лучше отлавливать до преобразования (например, через trim()).

Также иногда полезно проверять, что числа конечные (Number.isFinite), чтобы не пропустить Infinity.

Частые ошибки новичков

  • Не приводить строковые числа к number.
  • Игнорировать NaN после преобразования.
  • Неправильно использовать % (ожидать дробную часть вместо остатка).
  • Терять точность в длинных цепочках вычислений без округления.

Анти-провал: после сложной формулы проверь результат на нескольких граничных входах (0, отрицательные, пустые строки).

Что будет, если изменить входные данные

В примере со скидкой:

  • price = '2000', discount = '15' -> корректный расчет;
  • discount = 'abc' -> NaN, логика должна уйти в ветку ошибки;
  • price = '0' -> итог 0;
  • discount = '100' -> итог 0.

Проверь себя: почему discount > 100 стоит отлавливать отдельной бизнес-проверкой?

Краткий итог

  • Арифметические операторы дают базовые вычисления в прикладной логике.
  • Самая частая ошибка - смешение строк и чисел при +.
  • Для надежности нужны явное приведение и проверка NaN.
  • Деление и остаток требуют внимания к edge case (0, отрицательные).
  • Корректная арифметика напрямую влияет на доверие к продукту (цены, рейтинги, прогресс).