Округление чисел в JavaScript

В JavaScript числа часто получаются дробными. Например, после деления, расчета скидки или среднего значения.

let total = 1000;
let users = 3;

console.log(total / users);

Результат:

333.3333333333333

Такое число не всегда удобно показывать пользователю или использовать дальше. В таких случаях его округляют.

Зачем округлять числа

Округление нужно, когда дробная часть мешает или когда результат должен быть в понятном формате.

Например:

  • показать цену с двумя знаками после точки;
  • получить целое количество страниц;
  • посчитать среднюю оценку;
  • убрать дробную часть из результата деления.

Для разных задач используются разные способы округления.

Math.round()

Math.round() округляет число до ближайшего целого.

console.log(Math.round(4.2));
console.log(Math.round(4.5));
console.log(Math.round(4.8));

Результат:

4
5
5

Если дробная часть меньше 0.5, число округляется вниз. Если 0.5 или больше - вверх.

let rating = 4.6;

console.log(Math.round(rating));

Результат:

5

Math.floor()

Math.floor() округляет число вниз.

console.log(Math.floor(4.2));
console.log(Math.floor(4.8));

Результат:

4
4

Для положительных чисел это похоже на простое отбрасывание дробной части.

Например, если нужно узнать, сколько полных часов прошло:

let minutes = 135;
let hours = Math.floor(minutes / 60);

console.log(hours);

Результат:

2

Прошло два полных часа. Остальные минуты в этот результат не попали.

Math.ceil()

Math.ceil() округляет число вверх.

console.log(Math.ceil(4.2));
console.log(Math.ceil(4.8));

Результат:

5
5

Такой способ часто нужен, когда даже небольшой остаток требует еще одну единицу.

Например, нужно понять, сколько страниц получится, если на одной странице показывать по 10 товаров:

let products = 23;
let perPage = 10;

let pages = Math.ceil(products / perPage);

console.log(pages);

Результат:

3

Две страницы вместят только 20 товаров, поэтому нужна третья.

Math.trunc()

Math.trunc() просто отбрасывает дробную часть.

console.log(Math.trunc(4.2));
console.log(Math.trunc(4.8));

Результат:

4
4

С положительными числами результат похож на Math.floor(). Разница заметна на отрицательных числах.

console.log(Math.floor(-4.8));
console.log(Math.trunc(-4.8));

Результат:

-5
-4

Math.floor() округляет вниз по числовой оси, а Math.trunc() только убирает дробную часть.

Округление до нескольких знаков

Иногда нужно округлить не до целого числа, а до одного или двух знаков после точки.

Например, до двух знаков:

let price = 19.987;
let roundedPrice = Math.round(price * 100) / 100;

console.log(roundedPrice);

Результат:

19.99

Здесь мы сначала сдвинули точку на два знака вправо, округлили число, а потом вернули точку обратно.

Для одного знака после точки умножаем и делим на 10:

let value = 4.67;

console.log(Math.round(value * 10) / 10);

Результат:

4.7

Такой способ возвращает именно число, а не строку.

toFixed()

Метод toFixed() тоже округляет число до нужного количества знаков после точки, но возвращает строку.

let price = 19.987;
let result = price.toFixed(2);

console.log(result);
console.log(typeof result);

Результат:

19.99
string

toFixed() удобно использовать для вывода числа на экран.

let total = 1200;

console.log(total.toFixed(2));

Результат:

1200.00

Если результат нужно дальше использовать в вычислениях, помните, что это строка.

let price = 19.987;
let fixedPrice = price.toFixed(2);

console.log(fixedPrice + 1);

Результат:

19.991

Произошло склеивание строк. Если нужно число, результат можно преобразовать:

let price = 19.987;
let fixedPrice = Number(price.toFixed(2));

console.log(fixedPrice + 1);

Результат:

20.99

Что выбрать

Выбор зависит от задачи.

  • Math.round() - округлить до ближайшего целого.
  • Math.floor() - всегда округлить вниз.
  • Math.ceil() - всегда округлить вверх.
  • Math.trunc() - отбросить дробную часть.
  • toFixed() - подготовить число для вывода с нужным количеством знаков.

Для вычислений чаще удобнее методы Math, потому что они возвращают числа. Для красивого вывода часто подходит toFixed().

Итого

В JavaScript есть несколько способов округлить число.

  • Math.round() округляет до ближайшего целого.
  • Math.floor() округляет вниз.
  • Math.ceil() округляет вверх.
  • Math.trunc() убирает дробную часть.
  • Для округления до двух знаков можно использовать Math.round(number * 100) / 100.
  • toFixed() возвращает строку, поэтому его удобно использовать для отображения результата.