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

Округление чисел в JavaScript
Комментарии: 5

В 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
Темы:
JavaScript
Ещё интересное — 6
Комментарии —
  1. Автор
    Автор26 марта 2022, 08:34#
    Math.ceil(-10.49); // 10
    Math.ceil(-10.5); // 10
    Math.ceil(-10.51); // 10

    Будет -10
    1. Andy Si26 марта 2022, 15:07#
      Спасибо, поправил
    2. муслим
      муслим17 ноября 2022, 22:45#
      А почему когда число в переменной parsefloat делает округление до целого? Если как в примере явно задать число то корректное округление. В примере tofixed.
      1. муслим
        муслим17 ноября 2022, 22:51#
        1.005 выдает 1, хотя должен 1.01
        1. Andy Si17 ноября 2022, 23:07#
          Не, всё правильно… если последнее число больше 5, то к предыдущему разряду прибавляется 1, а если меньше — то 0. Соответственно:
          parseFloat(1.005.toFixed(2)); // 1.00 (нули отбрасываются)
          parseFloat(1.006.toFixed(2)); // 1.01
        © REALADMIN.RU   2022 г.
        Страница сгенерирована: 0,0799 s | 4 mb.
        На каком уровне Вы играете в шахматы?
        OPROS