← JavaScript/Базовые операторы и математика#59 из 383← ПредыдущийСледующий →+15 XP
Полезно по теме:Гайд: как учить JavaScriptПрактика: JS базаПрактика: async и сетьТермин: Closure

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

Когда Яндекс.Такси рассчитывает стоимость поездки — умножает тариф на километры, прибавляет платную дорогу, делит на промокод. Когда Steam показывает "Ещё 200 монет до скидки" — вычитает текущий баланс из нужной суммы. Это всё операторы в действии.

На основе предыдущих уроков

Операторы работают с переменными и значениями разных типов. Результаты вычислений используются в условиях и передаются в функции.

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

| Оператор | Значение | Пример |

|----------|----------|--------|

| + | Сложение (или конкатенация) | 5 + 3 = 8 |

| - | Вычитание | 10 - 4 = 6 |

| * | Умножение | 6 * 7 = 42 |

| / | Деление | 15 / 4 = 3.75 |

| % | Остаток от деления | 17 % 5 = 2 |

| ** | Возведение в степень | 2 ** 8 = 256 |

Остаток от деления % — полезнее чем кажется

% (modulo) не только "остаток", но и мощный инструмент:

// Проверить чётность
n % 2 === 0   // чётное
n % 2 !== 0   // нечётное

// Циклический сдвиг по массиву (бесконечная карусель)
const index = (current + 1) % slides.length

// Проверить делимость
n % 3 === 0   // делится на 3 без остатка

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

let price = 1000
price += 200   // price = price + 200 = 1200
price -= 100   // price = 1100
price *= 1.2   // price = 1320 (НДС 20%)
price /= 2     // price = 660
price **= 2    // price = 435600

// Инкремент и декремент
let count = 5
count++    // count = 6 (постфиксный: сначала использует, потом увеличивает)
++count    // count = 7 (префиксный: сначала увеличивает, потом использует)
count--    // count = 6

Ловушка с + и строками

Оператор + перегружен: он умеет и складывать числа, и склеивать строки. Если один из операндов — строка, + работает как конкатенация:

1 + 2         // 3      — числа
'1' + 2       // '12'   — строка + число = строка
1 + '2'       // '12'   — то же
1 + 2 + '3'  // '33'   — 1+2=3, потом 3+'3'='33'
'1' + 2 + 3  // '123'  — '1'+'2'='12', потом '12'+'3'='123'

-, *, / всегда работают с числами — неявно преобразовывают строки.

Типичные ошибки

Ошибка 1: Деление целых чисел даёт дробь

const perPage = 10
const total = 23
const pages = total / perPage  // 2.3 — не 2!
// Правильно: Math.ceil для округления вверх (страниц)
const pages = Math.ceil(total / perPage)  // 3 страницы

Ошибка 2: NaN распространяется по всему выражению

const price = Number('abc')  // NaN — не число
const total = price * 2 + 100  // NaN — всё выражение становится NaN
// Правильно: проверять входные данные
if (isNaN(price)) console.log('Введите корректную цену')

Ошибка 3: Точность чисел с плавающей точкой

0.1 + 0.2   // 0.30000000000000004 — не 0.3!
// Для денег используй Math.round или умножай на 100:
Math.round((0.1 + 0.2) * 100) / 100  // 0.3
// Или в рублях/копейках: работай с целыми числами (копейки)

В реальных проектах

Оператор % используется для пагинации, карусельных слайдеров, поочерёдного распределения задач. Округление через Math.round, Math.ceil, Math.floor — в любом расчёте цен. Работа с деньгами в копейках (целых числах) — стандарт во избежание ошибок точности.

Примеры

Расчёт стоимости заказа с НДС и скидкой

const itemPrice = 1500    // цена за единицу (в рублях)
const quantity = 3
const discountPct = 15    // скидка 15%
const vatRate = 0.2       // НДС 20%

// Расчёт шаг за шагом
const subtotal = itemPrice * quantity          // 4500
const discountAmount = subtotal * discountPct / 100  // 675
const afterDiscount = subtotal - discountAmount       // 3825
const vat = afterDiscount * vatRate            // 765
const total = afterDiscount + vat              // 4590

console.log('Сумма:', subtotal)                // 4500
console.log('Скидка:', discountAmount)         // 675
console.log('НДС:', Math.round(vat))           // 765
console.log('Итого с НДС:', Math.round(total)) // 4590

// % — проверяем номер заказа
const orderId = 10042
console.log(orderId % 2 === 0 ? 'Чётный заказ' : 'Нечётный заказ')

// Пагинация: номер страницы для элемента с индексом i
const itemsPerPage = 10
const itemIndex = 47
const pageNumber = Math.floor(itemIndex / itemsPerPage) + 1
console.log('Страница:', pageNumber)  // 5

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

Когда Яндекс.Такси рассчитывает стоимость поездки — умножает тариф на километры, прибавляет платную дорогу, делит на промокод. Когда Steam показывает "Ещё 200 монет до скидки" — вычитает текущий баланс из нужной суммы. Это всё операторы в действии.

На основе предыдущих уроков

Операторы работают с переменными и значениями разных типов. Результаты вычислений используются в условиях и передаются в функции.

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

| Оператор | Значение | Пример |

|----------|----------|--------|

| + | Сложение (или конкатенация) | 5 + 3 = 8 |

| - | Вычитание | 10 - 4 = 6 |

| * | Умножение | 6 * 7 = 42 |

| / | Деление | 15 / 4 = 3.75 |

| % | Остаток от деления | 17 % 5 = 2 |

| ** | Возведение в степень | 2 ** 8 = 256 |

Остаток от деления % — полезнее чем кажется

% (modulo) не только "остаток", но и мощный инструмент:

// Проверить чётность
n % 2 === 0   // чётное
n % 2 !== 0   // нечётное

// Циклический сдвиг по массиву (бесконечная карусель)
const index = (current + 1) % slides.length

// Проверить делимость
n % 3 === 0   // делится на 3 без остатка

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

let price = 1000
price += 200   // price = price + 200 = 1200
price -= 100   // price = 1100
price *= 1.2   // price = 1320 (НДС 20%)
price /= 2     // price = 660
price **= 2    // price = 435600

// Инкремент и декремент
let count = 5
count++    // count = 6 (постфиксный: сначала использует, потом увеличивает)
++count    // count = 7 (префиксный: сначала увеличивает, потом использует)
count--    // count = 6

Ловушка с + и строками

Оператор + перегружен: он умеет и складывать числа, и склеивать строки. Если один из операндов — строка, + работает как конкатенация:

1 + 2         // 3      — числа
'1' + 2       // '12'   — строка + число = строка
1 + '2'       // '12'   — то же
1 + 2 + '3'  // '33'   — 1+2=3, потом 3+'3'='33'
'1' + 2 + 3  // '123'  — '1'+'2'='12', потом '12'+'3'='123'

-, *, / всегда работают с числами — неявно преобразовывают строки.

Типичные ошибки

Ошибка 1: Деление целых чисел даёт дробь

const perPage = 10
const total = 23
const pages = total / perPage  // 2.3 — не 2!
// Правильно: Math.ceil для округления вверх (страниц)
const pages = Math.ceil(total / perPage)  // 3 страницы

Ошибка 2: NaN распространяется по всему выражению

const price = Number('abc')  // NaN — не число
const total = price * 2 + 100  // NaN — всё выражение становится NaN
// Правильно: проверять входные данные
if (isNaN(price)) console.log('Введите корректную цену')

Ошибка 3: Точность чисел с плавающей точкой

0.1 + 0.2   // 0.30000000000000004 — не 0.3!
// Для денег используй Math.round или умножай на 100:
Math.round((0.1 + 0.2) * 100) / 100  // 0.3
// Или в рублях/копейках: работай с целыми числами (копейки)

В реальных проектах

Оператор % используется для пагинации, карусельных слайдеров, поочерёдного распределения задач. Округление через Math.round, Math.ceil, Math.floor — в любом расчёте цен. Работа с деньгами в копейках (целых числах) — стандарт во избежание ошибок точности.

Примеры

Расчёт стоимости заказа с НДС и скидкой

const itemPrice = 1500    // цена за единицу (в рублях)
const quantity = 3
const discountPct = 15    // скидка 15%
const vatRate = 0.2       // НДС 20%

// Расчёт шаг за шагом
const subtotal = itemPrice * quantity          // 4500
const discountAmount = subtotal * discountPct / 100  // 675
const afterDiscount = subtotal - discountAmount       // 3825
const vat = afterDiscount * vatRate            // 765
const total = afterDiscount + vat              // 4590

console.log('Сумма:', subtotal)                // 4500
console.log('Скидка:', discountAmount)         // 675
console.log('НДС:', Math.round(vat))           // 765
console.log('Итого с НДС:', Math.round(total)) // 4590

// % — проверяем номер заказа
const orderId = 10042
console.log(orderId % 2 === 0 ? 'Чётный заказ' : 'Нечётный заказ')

// Пагинация: номер страницы для элемента с индексом i
const itemsPerPage = 10
const itemIndex = 47
const pageNumber = Math.floor(itemIndex / itemsPerPage) + 1
console.log('Страница:', pageNumber)  // 5

Задание

Ты разрабатываешь калькулятор чаевых для ресторанного приложения. Функция calcTip считает рекомендуемые чаевые: 15% для обычного счёта. Если счёт больше 5000 — дополнительная скидка 5% на чаевые (т.е. 15% * 0.95).

Подсказка

Скидка 5% означает оставить 95% — умножай на 0.95

Загружаем среду выполнения...
Загружаем AI-помощника...