Как округлить число в большую сторону
Перейти к содержимому

Как округлить число в большую сторону

Осваиваем JS: округление до целого

Часто вычисления дают результаты, которые не соответствуют пределам нужных диапазонов. В результате нужно осуществлять JavaScript округление до определенного значения.

Для чего округлять числа?

JavaScript не хранит целые числа, поскольку их значения представлены в виде цифр с плавающей точкой. Многие дроби не могут быть представлены числом с определенным конечным количеством знаков после запятой, поэтому JavaScript может генерировать результаты, наподобие приведенного ниже:

На практике это не будет иметь никакого значения, поскольку речь идет о погрешности в 2 квинтилионные. Но это может отразиться на результате при работе с числами, которые представляют значения валют, процентов или размер файла. Поэтому нужно сделать JavaScript округление до целых или до определенного знака после запятой.

Округление десятичных чисел

Чтобы « обрезать » десятичное число, используются методы toFixed() или toPrecision() . Они оба принимают один аргумент, который определяет количество значимых и знаков после запятой, которые должны быть включены в результат:

  • если для toFixed() аргумент не определен, значение по умолчанию равно 0 , то есть без знаков после запятой; максимальное значение аргумента равно 20 ;
  • если для toPrecision() аргумент не задан, число не изменяется.

И toFixed() , и toPrecision возвращают округленное строчное представление результата, а не число. Это означает, что прибавление rounded к randNum в результате даст конкатенацию строк, а не одно число:

Если нужно получить в результате JavaScript округление до сотых, используйте parseFloat() :

toFixed() и toPrecision() также являются полезными методами для усечения большого количества знаков после запятой. Это удобно при работе с числами, представляющими денежные единицы:

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

Как избежать ошибок при округлении десятичных дробей

В некоторых случаях toFixed и toPrecision осуществляют JavaScript округление в меньшую сторону , а не округление в большую сторону:

Результатом приведенного выше примера должно быть 1.01, а не 1. Если нужно избежать этой ошибки, я рекомендую использовать экспоненциальные числа:

Если нужно еще более надежное решение, чем округление, оно доступно на MDN .

Округление с помощью эпсилона

Альтернативный метод JavaScript, позволяющий осуществить округление до десятых, был введен в ES6 ( также известном, как JavaScript 2015 ). » Машинный эпсилон » обеспечивает разумный предел погрешности при сравнении двух чисел с плавающей запятой. Без округления, сравнения могут дать результаты, подобные следующим:

Math.EPSILON может быть использован в функции для получения корректного сравнения:

Функция принимает два аргумента : один содержит вычисления, второй ожидаемый ( округленный ) результат. Она возвращает сравнение этих двух параметров:

Все современные браузеры поддерживают математические функции ES6 . Но если необходимо обеспечить поддержку в старых браузерах, то нужно использовать полифиллы .

Усечение десятичных чисел

Все методы, представленные ранее, выполняют JavaScript округление до десятых . Чтобы усечь положительное число до двух знаков после запятой, умножить его на 100 , усечь снова, а затем полученный результат разделить на 100 , нужно:

Если требуется что-то более гибкое, можно воспользоваться побитовым оператором:

Округление до ближайшего числа

Чтобы осуществить округление до целого , используется Math.round JavaScript :

Обратите внимание, что » половинные значения «, такие как .5 , округляются вверх.

Округление в меньшую сторону до ближайшего целого числа

Если вы хотите округлять в меньшую сторону, используйте метод Math.floor() :

Округление » вниз » имеет одно направление для всех чисел, в том числе и для отрицательных. Это можно представить, как небоскреб с бесконечным количеством этажей, в том числе и ниже уровня фундамента ( представляющих отрицательные числа ). Если вы находитесь в лифте между подвальными этажами 2 и 3 ( что соответствует значению -2.5 ), Math.floor доставит вас на этаж -3 :

Если нужно избежать этого, используйте JavaScript Math округление с помощью Math.trunc() , поддерживаемый во всех современных браузерах ( кроме IE / Edge ):

MDN также предоставляет полифилл из трех строк для обеспечения поддержки Math.trunc в старых браузерах и IE / Edge .

Округление в большую сторону до ближайшего целого числа

Если вы хотите округлить десятичные числа вверх, используйте Math.ceil . Действие этого метода также можно представить, как бесконечный лифт: Math.ceil всегда везет вас » вверх «, независимо от того, является ли число отрицательным или положительным:

Округление до ближайшего кратного числа

Если нужно округлить значение до ближайшего числа, кратного 5 , создайте функцию, которая делит число на 5 , округляет его, а затем умножает результат на то же значение:

Если нужно выполнить JavaScript округление до двух знаков, можно передавать функции, как начальное число, так и кратность:

Чтобы использовать функцию, включите в ее вызов округляемое число и кратность:

Чтобы округлять значения только в большую или меньшую сторону замените в функции round на ceil или floor .

Привязка к диапазону

Иногда нужно получить значение х , которое должно находиться в пределах определенного диапазона. Например, нужно значение от 1 до 100 , но мы получаем значение 123 . Чтобы исправить это, можно использовать min() ( возвращает наименьшее из чисел ) и max ( возвращает максимально допустимое число ).

Можно создать функцию или расширение класса Number :

Округление по Гауссу

Округление по Гауссу (» банковское «, конвергентное или голландское ) представляет собой метод округления без статистической погрешности. Стандартное JavaScript округление иногда дает погрешности в большую сторону. Округление по Гауссу позволяет избежать этой погрешности с помощью округления до ближайшего четного числа. Лучшее решение, которое мне известно:

Десятичные числа в CSS

Так как JavaScript часто используется для получения информации о позиции или преобразования HTML-элементов , то можно задаться вопросом, что произойдет, если мы сгенерируем десятичные значения для элементов:

Современные браузеры поддерживают десятичные значения в блочной модели, в том числе процентные и пиксельные единицы.

Пожалуйста, оставьте ваши комментарии по текущей теме статьи. За комментарии, подписки, отклики, дизлайки, лайки огромное вам спасибо!

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

В JavaScript есть несколько методов для округления чисел до нужного формата. Они отличаются принципом работы и имеют ряд особенностей, которые рассмотрим на примерах.

js округление

Math — встроенный в JS объект, который содержит свойства и методы с математическим уклоном.

Math.round

Math.round(x) — округляет число до ближайшего целого по математическому принципу. Если первая цифра после запятой равна или больше 5, то к положительному целому числу прибавляется единица.

К отрицательному идёт прибавка только если цифра строго больше 5:

Math.floor

Math.floor(x) — округление до наименьшего целого. Для положительных чисел всё что после запятой не учитывается и отбрасывается.

Для отрицательных логика та же, но целое число изменяется в меньшую сторону:

Math.ceil

Math.ceil(x) — это противоположность «Math.floor», то есть преобразование происходит в большую сторону.

Здесь без комментариев:

Math.trunc

Math.trunc(x) — предельно простая функция — для любых чисел отбрасывает всё после запятой.

Тоже самое для отрицательных:

Не поддерживается браузером «Internet Explorer».

Округление до нужного знака

Рассмотрим способы округления до определенного знака после запятой. Для этих целей может применяться любая предыдущая функция. Округлим «Pi» до 2 знаков после запятой.

Math.pow(10, 2) — возводит первый аргумент в степень (второй аргумент).

Number.toFixed

Этот метод из прототипа объекта «Number» похож на «Math.round», но с рядом отличий:

  • результат приводится к типу «String»;
  • если передаваемый аргумент больше количества знаков после запятой, то метод добавит к результату нули.

Для приведения результата к типу «Number» используйте функцию «parseFloat».

Как округлить число в большую сторону

Не забывайте, что вы используете целочисленное деление. Результат деления 1/30 — уже 0. Поэтому перейдите к делению дробных чисел (1.0/30.0 = 0.03333333. ), а уж это число округляйте вверх.

user avatar

user avatar

Можно без Math: (a + b — 1) / b

Вариант с целочисленным делением выглядит так: (a*b+b*b-1)/(b*b)

Найдём вариант с целочисленным делением.
Нетрудно проверить, что ceil(a/b) = — floor(-a/b) .
Т.е. если a/b — это округление вниз, то -(-a/b) это округление вверх.

Если при целочисленном делении дробная часть просто отбрасывается (что соответствует операции trunc), то в случае ab>0 округление вверх — это -(-a/b) ,
а в случае ab<0 — это a/b .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *