Работа с дробными числами в JavaScript
- Как записывать дробные числа
- Вычисления с дробями
- Неточность дробных чисел
- Вывод на экран
- Сравнение дробных чисел
- Деньги и точные расчеты
- Итого
Дробные числа используются для цен, процентов, координат, рейтингов, веса, размеров и любых значений, где нужна часть числа.
let price = 19.99;
let rating = 4.7;
let percent = 12.5;
В JavaScript такие значения относятся к типу number, как и обычные целые числа.
Как записывать дробные числа
Дробная часть в JavaScript отделяется точкой.
let number = 10.5;
Запятая для дробных чисел в коде не используется.
let number = 10,5;
Так писать не нужно. Для JavaScript это не число 10.5.
Если пользователь должен увидеть число в привычном формате с запятой, это уже отдельная задача форматирования. В самом коде дробные числа пишем через точку.
Вычисления с дробями
С дробными числами работают обычные арифметические операторы.
let price = 19.99;
let count = 3;
let total = price * count;
console.log(total);
Результат:
59.97
Можно складывать, вычитать, умножать и делить дробные числа так же, как целые.
console.log(10.5 + 2.25);
console.log(10.5 - 2.25);
console.log(10.5 / 2);
Результат:
12.75
8.25
5.25
Неточность дробных чисел
Иногда результат дробных вычислений выглядит странно.
console.log(0.1 + 0.2);
Результат:
0.30000000000000004
На бумаге мы ждем 0.3, но компьютер хранит дробные числа в двоичном виде. Некоторые десятичные дроби нельзя сохранить абсолютно точно, поэтому появляется маленькая погрешность.
Это не ошибка именно JavaScript. Такая особенность есть во многих языках программирования.
Вывод на экран
Если нужно показать пользователю число с нужным количеством знаков после точки, можно использовать toFixed().
let result = 0.1 + 0.2;
console.log(result.toFixed(2));
Результат:
0.30
Важно помнить: toFixed() возвращает строку.
let price = 19.9;
let formattedPrice = price.toFixed(2);
console.log(formattedPrice);
console.log(typeof formattedPrice);
Результат:
19.90
string
Для вывода на экран это удобно. Для дальнейших вычислений лучше работать с числом, а форматировать результат уже в конце.
Сравнение дробных чисел
Из-за погрешностей дробные вычисления не всегда удобно сравнивать через строгое равенство.
let result = 0.1 + 0.2;
console.log(result === 0.3);
Результат:
false
Для таких случаев часто сравнивают не сами числа, а разницу между ними.
let result = 0.1 + 0.2;
let difference = Math.abs(result - 0.3);
console.log(difference < 0.000001);
Результат:
true
Math.abs() возвращает число без знака. Мы проверяем, что разница очень маленькая, и считаем значения равными для нашей задачи.
Деньги и точные расчеты
С деньгами лучше не строить логику на дробных рублях или долларах, если нужна точность.
console.log(0.1 + 0.2);
Для простого вывода это можно округлить. Но если нужно считать деньги надежнее, часто хранят сумму в минимальных единицах: копейках или центах.
let price = 1999; // 19.99
let count = 3;
let total = price * count;
console.log(total);
Результат:
5997
Здесь 5997 означает 59.97. Так мы считаем целыми числами, а форматирование делаем только перед выводом.
let total = 5997;
console.log((total / 100).toFixed(2));
Результат:
59.97
Итого
Дробные числа в JavaScript удобны для обычных расчетов, но с ними нужно помнить про особенности хранения.
- Дробные числа записываются через точку:
10.5. - Обычные арифметические операторы работают и с дробями.
- Результат вроде
0.30000000000000004появляется из-за внутреннего хранения дробных чисел. toFixed()удобно использовать для вывода, но он возвращает строку.- Дробные результаты лучше сравнивать с учетом небольшой погрешности.
- Деньги часто считают в копейках или центах, чтобы работать с целыми числами.