Пошук уроків, статей та іншого контенту
Розберіть, як JavaScript працює з цілими та дробовими числами. Познайомтеся з базовими арифметичними операціями та особливостями числового типу.
numberУ JavaScript тип number використовують для роботи з числами:
цілими: 10, -3, 0;
дробовими: 3.14, -0.5;
дуже великими або дуже малими значеннями;
спеціальними числовими значеннями NaN та Infinity.
На відміну від деяких інших мов, JavaScript не має окремих типів для цілих і дробових чисел у повсякденній роботі. І 5, і 5.5 мають тип number.
const integer = 42;
const decimal = 3.14;
const negative = -10;
console.log(typeof integer); // "number"
console.log(typeof decimal); // "number"
console.log(typeof negative); // "number"Ціле число не має дробової частини:
const age = 25;
const temperature = -8;
const quantity = 0;Дробове число має частину після крапки:
const price = 19.99;
const height = 1.75;
const discount = 0.5;У JavaScript для дробової частини використовують крапку, а не кому:
const correct = 2.5;
// Помилка синтаксису:
// const incorrect = 2,5;Крапка в числі є десятковим роздільником. Кома використовується для розділення елементів, наприклад у списках або аргументах функцій.
Для обчислень JavaScript має стандартні арифметичні оператори.
Оператор + додає числа:
const firstNumber = 8;
const secondNumber = 5;
const result = firstNumber + secondNumber;
console.log(result); // 13Оператор - віднімає одне число від іншого:
const balance = 100;
const expense = 35;
const remaining = balance - expense;
console.log(remaining); // 65Оператор * множить числа:
const price = 12;
const count = 3;
const total = price * count;
console.log(total); // 36Оператор / ділить одне число на інше:
const distance = 120;
const time = 2;
const speed = distance / time;
console.log(speed); // 60Результатом ділення може бути дробове число:
const result = 5 / 2;
console.log(result); // 2.5На відміну від деяких мов, JavaScript не відкидає дробову частину під час звичайного ділення.
Оператор % повертає остачу від ділення:
console.log(10 % 3); // 1
console.log(12 % 4); // 0
console.log(7 % 2); // 1Остачу часто використовують, щоб перевірити, чи є число парним:
const number = 18;
const isEven = number % 2 === 0;
console.log(isEven); // trueЯкщо остача від ділення на 2 дорівнює 0, число парне.
Оператор ** підносить число до степеня:
const square = 5 ** 2;
const cube = 2 ** 3;
console.log(square); // 25
console.log(cube); // 8JavaScript виконує арифметичні операції у визначеному порядку:
дужки;
піднесення до степеня;
множення, ділення та остача;
додавання та віднімання.
const result = 2 + 3 * 4;
console.log(result); // 14Спочатку виконується множення 3 * 4, а потім додавання.
Щоб явно змінити порядок, використовуйте дужки:
const result = (2 + 3) * 4;
console.log(result); // 20Якщо змінну оголошено через let, її значення можна змінити:
let score = 10;
score = score + 5;
console.log(score); // 15Для короткого запису арифметичних операцій використовують складені оператори:
let points = 10;
points += 5; // points = points + 5
points -= 2; // points = points - 2
points *= 3; // points = points * 3
points /= 2; // points = points / 2
console.log(points); // 19.5Також існують оператори збільшення та зменшення на одиницю:
let counter = 0;
counter++;
counter++;
console.log(counter); // 2
counter--;
console.log(counter); // 1Оператор ++ збільшує значення на 1, а -- зменшує його на 1.
Щоб записати від’ємне число, перед ним ставлять знак -:
const debt = -150;
const temperature = -4.5;
console.log(debt);
console.log(temperature);Унарний мінус також може змінити знак уже наявного числа:
const number = 8;
const negativeNumber = -number;
console.log(negativeNumber); // -8Унарний плюс зазвичай використовують для перетворення значення на число:
const value = "42";
const number = +value;
console.log(number); // 42
console.log(typeof number); // "number"Для явного перетворення частіше використовують Number():
const text = "123.5";
const value = Number(text);
console.log(value); // 123.5
console.log(typeof value); // "number"InfinityInfinity означає нескінченність. Наприклад, ділення додатного числа на нуль дає Infinity:
console.log(10 / 0); // Infinity
console.log(-10 / 0); // -InfinityЦе не помилка синтаксису, але такий результат зазвичай означає, що в обчисленні потрібно перевірити ділення на нуль.
const total = 100;
const count = 0;
if (count === 0) {
console.log("Не можна ділити на нуль");
} else {
console.log(total / count);
}NaNNaN означає «не число» — Not a Number. Це спеціальне значення типу number, яке з’являється, коли результат не можна отримати як звичайне число.
const result = "hello" * 2;
console.log(result); // NaN
console.log(typeof result); // "number"Для перевірки використовують Number.isNaN():
const value = Number("abc");
if (Number.isNaN(value)) {
console.log("Значення не вдалося перетворити на число");
}Не варто перевіряти NaN за допомогою value === NaN, оскільки це порівняння завжди повертає false.
const value = NaN;
console.log(value === NaN); // false
console.log(Number.isNaN(value)); // trueJavaScript зберігає звичайні числа у двійковому форматі. Деякі десяткові дроби неможливо представити в ньому абсолютно точно.
Через це результат може виглядати несподівано:
const result = 0.1 + 0.2;
console.log(result); // 0.30000000000000004Це не помилка саме оператора +. Це наслідок способу зберігання дробових чисел у пам’яті.
Для порівняння дробових результатів часто використовують допустиму похибку:
const result = 0.1 + 0.2;
const expected = 0.3;
const epsilon = Number.EPSILON;
const areEqual = Math.abs(result - expected) < epsilon;
console.log(areEqual); // trueНа практиці для грошових розрахунків часто працюють із найменшими цілими одиницями. Наприклад, замість гривень з копійками зберігають суму в копійках:
const priceInKopiykas = 1999;
const count = 3;
const totalInKopiykas = priceInKopiykas * count;
console.log(totalInKopiykas); // 5997Тип number може точно зберігати цілі числа лише в певному діапазоні. Найбільше безпечне ціле число доступне через Number.MAX_SAFE_INTEGER:
console.log(Number.MAX_SAFE_INTEGER);
// 9007199254740991Для перевірки, чи є число безпечним цілим, використовують Number.isSafeInteger():
console.log(Number.isSafeInteger(100)); // true
console.log(Number.isSafeInteger(1.5)); // false
console.log(Number.isSafeInteger(Number.MAX_SAFE_INTEGER)); // trueДля більшості звичайних задач — лічильників, віку, кількості товарів — типу number достатньо.
Для роботи з числами часто використовують об’єкт Math.
console.log(Math.round(4.6)); // 5
console.log(Math.round(4.4)); // 4
console.log(Math.floor(4.9)); // 4
console.log(Math.ceil(4.1)); // 5Math.round() округлює до найближчого цілого;
Math.floor() округлює вниз;
Math.ceil() округлює вгору.
Метод toFixed() форматує число з певною кількістю знаків після крапки:
const price = 12.3456;
console.log(price.toFixed(2)); // "12.35"Важливо: toFixed() повертає рядок, а не число.
const formattedPrice = price.toFixed(2);
console.log(typeof formattedPrice); // "string"Якщо потрібне число, результат можна перетворити:
const roundedPrice = Number(price.toFixed(2));
console.log(roundedPrice); // 12.35
console.log(typeof roundedPrice); // "number"Нижче програма обчислює загальну вартість товарів і застосовує знижку:
const productPrice = 250;
const productCount = 3;
const discountPercent = 10;
const subtotal = productPrice * productCount;
const discount = subtotal * discountPercent / 100;
const total = subtotal - discount;
console.log(`Вартість без знижки: ${subtotal} грн`);
console.log(`Знижка: ${discount} грн`);
console.log(`До сплати: ${total} грн`);Результат:
Вартість без знижки: 750 грн
Знижка: 75 грн
До сплати: 675 грнНеправильно:
const price = 10,5;Правильно:
const price = 10.5;console.log(10 / 3); // 3.3333333333333335
console.log(10 % 3); // 1/ повертає результат ділення, а % — остачу.
NaN через ===Неправильно:
const value = NaN;
console.log(value === NaN); // falseПравильно:
console.log(Number.isNaN(value)); // trueconsole.log(0.1 + 0.2 === 0.3); // falseДля дробових значень потрібно враховувати похибку або використовувати підхід із цілими найменшими одиницями.
toFixed()const value = (10 / 3).toFixed(2);
console.log(value); // "3.33"
console.log(typeof value); // "string"Якщо для наступних обчислень потрібне число, використовуйте Number(value).
У JavaScript цілі та дробові числа належать до типу number.
Основні арифметичні оператори: +, -, *, /, %, **.
Дужки допомагають явно визначити порядок обчислень.
Infinity з’являється, зокрема, під час ділення на нуль.
NaN означає, що результат не є звичайним числом.
Дробові обчислення можуть мати невелику похибку.
toFixed() повертає рядок.
Для перевірки NaN використовуйте Number.isNaN().
Для перевірки безпечного цілого числа використовуйте Number.isSafeInteger().