Округление чисел в JavaScript
В JavaScript есть несколько методов для округления чисел до нужного формата. Они отличаются принципом работы и имеют ряд особенностей, которые рассмотрим на примерах.
Math — встроенный в JS объект, который содержит свойства и методы с математическим уклоном.
Math.round
Math.round(x) — округляет число до ближайшего целого по математическому принципу. Если первая цифра после запятой равна или больше 5, то к положительному целому числу прибавляется единица.
Math.round(10.49); // 10 Math.round(10.5); // 11 Math.round(10.51); // 11
К отрицательному идёт прибавка только если цифра строго больше 5:
Math.round(-10.49); // -10 Math.round(-10.5); // -10 Math.round(-10.51); // -11
Math.floor
Math.floor(x) — округление до наименьшего целого. Для положительных чисел всё что после запятой не учитывается и отбрасывается.
Math.floor(10.49); // 10 Math.floor(10.5); // 10 Math.floor(10.51); // 10
Для отрицательных логика та же, но целое число изменяется в меньшую сторону:
Math.floor(-10.49); // -11 Math.floor(-10.5); // -11 Math.floor(-10.51); // -11
Math.ceil
Math.ceil(x) — это противоположность «Math.floor», то есть преобразование происходит в большую сторону.
Math.ceil(10.49); // 11 Math.ceil(10.5); // 11 Math.ceil(10.51); // 11
Здесь без комментариев:
Math.ceil(-10.49); // -10 Math.ceil(-10.5); // -10 Math.ceil(-10.51); // -10
Math.trunc
Math.trunc(x) — предельно простая функция — для любых чисел отбрасывает всё после запятой.
Math.trunc(10.49); // 10 Math.trunc(10.5); // 10 Math.trunc(10.51); // 10
Тоже самое для отрицательных:
Math.trunc(-10.49); // -10 Math.trunc(-10.5); // -10 Math.trunc(-10.51); // -10
Не поддерживается браузером «Internet Explorer».
Округление до нужного знака
Рассмотрим способы округления до определенного знака после запятой. Для этих целей может применяться любая предыдущая функция. Округлим «Pi» до 2 знаков после запятой.
Math.round(3.14159265359 * Math.pow(10, 2)) / Math.pow(10, 2); // 3.14 Math.floor(3.14159265359 * Math.pow(10, 2)) / Math.pow(10, 2); // 3.14 Math.ceil(3.14159265359 * Math.pow(10, 2)) / Math.pow(10, 2); // 3.15 Math.trunc(3.14159265359 * Math.pow(10, 2)) / Math.pow(10, 2); // 3.14
Math.pow(10, 2) — возводит первый аргумент в степень (второй аргумент).
Math.round(3.14159265359 * 1000) / 1000; // 3.142 Math.round(3.14159265359 * Math.pow(10, 3)) / Math.pow(10, 3); // 3.142
Number.toFixed
Этот метод из прототипа объекта «Number» похож на «Math.round», но с рядом отличий:
- результат приводится к типу «String»;
- если передаваемый аргумент больше количества знаков после запятой, то метод добавит к результату нули.
Примеры:
3.14159265359.toFixed(2); // "3.14" 3.14159265359.toFixed(3); // "3.142" let num = 3.14159265359; num.toFixed(3); // "3.142" -3.14159265359.toFixed(3); // "-3.142" 3.14.toFixed(4); // "3.1400" let num = 3; num.toFixed(3); // "3.000"
Для приведения результата к типу «Number» используйте функцию «parseFloat».
parseFloat(3.14159265359.toFixed(3)); // 3.142
Math.ceil(-10.5); // 10
Math.ceil(-10.51); // 10
Будет -10