Часто вычисления дают результаты, которые не соответствуют пределам нужных диапазонов. В результате нужно осуществлять JavaScript округление до определенного значения.
Содержание
- Для чего округлять числа?
- Округление десятичных чисел
- Как избежать ошибок при округлении десятичных дробей
- Округление с помощью эпсилона
- Усечение десятичных чисел
- Округление до ближайшего числа
- Округление вниз до ближайшего целого числа
- Округление вверх до ближайшего целого числа
- Округление до ближайшего кратного числа
- Привязка к диапазону
- Округление по Гауссу
- Десятичные числа в CSS
- Отмечен как дубликат участниками mymedia, freim, L.F.C., ЮрийСПб ♦ 22 мар в 13:42 .
- Для чего округлять числа?
- Округление десятичных чисел
- Как избежать ошибок при округлении десятичных дробей
- Округление с помощью эпсилона
- Усечение десятичных чисел
- Округление до ближайшего числа
- Округление вниз до ближайшего целого числа
- Округление вверх до ближайшего целого числа
- Округление до ближайшего кратного числа
- Привязка к диапазону
- Округление по Гауссу
- Десятичные числа в CSS
- Отмечен как дубликат участниками mymedia, freim, L.F.C., ЮрийСПб ♦ 22 мар в 13:42 .
Для чего округлять числа?
JavaScript не хранит целые числа, поскольку их значения представлены в виде цифр с плавающей точкой. Многие дроби не могут быть представлены числом с определенным конечным количеством знаков после запятой, поэтому JavaScript может генерировать результаты, наподобие приведенного ниже:
На практике это не будет иметь никакого значения, поскольку речь идет о погрешности в 2 квинтилионные. Но это может отразиться на результате при работе с числами, которые представляют значения валют, процентов или размер файла. Поэтому нужно сделать JavaScript округление до целого или до определенного знака после запятой.
Округление десятичных чисел
Чтобы « обрезать » десятичное число, используются методы toFixed() или toPrecision() . Они оба принимают один аргумент, который определяет количество значимых и знаков после запятой, которые должны быть включены в результат:
- если для toFixed() аргумент не определен, значение по умолчанию равно 0 , то есть без знаков после запятой; максимальное значение аргумента равно 20 ;
- если для toPrecision() аргумент не задан, число не изменяется.
И toFixed() , и toPrecision возвращают округленное строчное представление результата, а не число. Это означает, что прибавление rounded к randNum в результате даст конкатенацию строк, а не одно число:
Если нужно получить в результате JavaScript округления до сотых число, используйте parseFloat() :
toFixed() и toPrecision() также являются полезными методами для усечения большого количества знаков после запятой. Это удобно при работе с числами, представляющими денежные единицы:
Обратите внимание, что если в числе больше знаков, чем задано параметром точности, toPrecision будет выдавать результат в научном формате:
Как избежать ошибок при округлении десятичных дробей
В некоторых случаях toFixed и toPrecision осуществляют JavaScript округление 5 в меньшую сторону , а не до большего:
Результатом приведенного выше примера должно быть 1.01, а не 1. Если нужно избежать этой ошибки, я рекомендую использовать экспоненциальные числа:
Если нужно еще более надежное решение, чем округление, оно доступно на MDN .
Округление с помощью эпсилона
Альтернативный метод JavaScript округления до десятых был введен в ES6 ( также известном, как JavaScript 2015 ). « Машинный эпсилон » обеспечивает разумный предел погрешности при сравнении двух чисел с плавающей запятой. Без округления, сравнения могут дать результаты, подобные следующим:
Math.EPSILON может быть использован в функции для получения корректного сравнения:
Функция принимает два аргумента : один содержит вычисления, второй ожидаемый ( округленный ) результат. Она возвращает сравнение этих двух параметров:
Все современные браузеры поддерживают математические функции ES6 . Но если необходимо обеспечить поддержку в старых браузерах, то нужно использовать полифиллы .
Усечение десятичных чисел
Все методы, представленные ранее, выполняют JavaScript округление до десятых . Чтобы усечь положительное число до двух знаков после запятой, умножить его на 100 , усечь снова, а затем полученный результат разделить на 100 , нужно:
Если требуется что-то более гибкое, можно воспользоваться побитовым оператором:
Округление до ближайшего числа
Чтобы осуществить JavaScript округление до целого , используется Math.round() :
Обратите внимание, что « половинные значения «, такие как .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 Rounding Recipes » , подготовленной дружной командой проекта Интернет-технологии.ру
Для округление чисел в jquery есть универсальная функция toFixed, которые позволяет округлять числа, как с дробной частью, так и без неё по правилам математики.
Округление до целового числа
Есть число 7.645 и его надо округлить до 8
Округление с дробной частью
Чтобы округлить до определенного количества цифр после запятой, например до сотых, для этого в функции передаём значение.
На данный вопрос уже ответили:
Здраствуйте. Есть возможность с помощю jquery округлить допустим 7.6545454 до 8? спасибо.
Отмечен как дубликат участниками mymedia, freim, L.F.C., ЮрийСПб ♦ 22 мар в 13:42 .
Подобный вопрос задавали ранее и на него уже получен ответ. Если представленные ответы не являются исчерпывающими, пожалуйста, задайте новый вопрос.
Источник: