Progress-servis55.ru

Новости из мира ПК
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Math round javascript

Методы округления чисел в JavaScript

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

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

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 » , подготовленной дружной командой проекта Интернет-технологии.ру

Форум

Справочник

Поиск по форуму
Расширенный поиск
К странице.

Илья Кантор, 15 мар 2009 — 23:02

Math.round

Синтаксис

Аргументы

Описание, примеры

Если дробная часть числа равна 0.5 или больше, то аргумент округляется к следующему большему целому. Если дробная часть меньше, чем 0.5, то округление производится до ближайшего меньшего целого.

См. также

  • Math.ceil /Метод/
  • Math.floor /Метод/
  • toPrecision /Метод/
  • toFixed /Метод/

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

Округление до нужной точности после запятой

Для этого используется метод toFixed.
0.1234.toFixed(2) = 0.12

.toFixed() не всегда работает правильно.. в Firefox 21.0, Chrome, Safari и Opera результатом такой строки
parseFloat(71.175).toFixed(2) будет 71.17 .

а такое результатом выражения
Math.round(parseFloat(71.175) * 100) / 100 будет 71.18, т.е. результат правильно округленный

при этом IE на тех же выражениях выдает всегда 71.18 ! похоже «правильность» js еще и от браузера зависит

>не всегда работает правильно.
parseFloat(71.175).toFixed(2)=71.17

правильно, это называется «банковское округление», где при округлении 5 учитывается предшествующий знак, нечетные в меньшую, четные в большую сторону.
поэтому
parseFloat(71.185).toFixed(2) будет 71.19

это округление используется в .NET

Но это только для toFixed(2). Для toFixed(1) или toFixed(3) этот феномен не наблюдается

Не могу найти функцию, которая возвращает дробную часть числа

123.456 % 1
и взять цифр сколько там надо

можно еще так:
123.456.toString().split(/./)[1];

Стоит еще раз поставить ударение: toFixed возвращает строковое представление числа, а поскольку и сравнение и сложение для строковых переменных в JS возможно (последнее становится конкатенацией) то желательно применять что то вроде

Или более жестко:

Дельный совет, спасибо. Провернуть такое при помощи toFixed() почему-то не получилось.

Собственно функция round с нужной точностью, для страждущих:

Вот ещё один вариант, но за точность не ручаюсь:

> Собственно функция round с нужной точностью, для страждущих:

Все равно это не решает проблемы:
10000.345.round(1) = 10000.3

Числа

Округление числа

Часто результатом расчётов бывает число с большим количеством знаков после запятой. Если это число будет использовано для дальнейших расчётов, то его можно оставить в таком виде. Но иногда требуется округление числа, например для вывода на страницу. В JavaScript округление чисел осуществляется несколькими методами.

Метод Math.round() округляет значение до целого числа.

Округление числа производится по математическим правилам. То есть, если после запятой идёт цифра от 0 до 4, то дробная часть просто отбрасывается. А если после запятой идёт цифра от 5 до 9, то дробрая часть отбрасывается, а к целой части прибавляется единица. пример:

Метод toFixed() округляет число до заданной точности.

точность — количество знаков после запятой, до которого округляется число

Этот метод возвращает не число а строку. Чтобы преобразовать её в число можно добавить + к возвращаемому значению. Пример:

Есть ещё два метода, которые округляют число до целого значения. Метод Math.floor() округляет в меньшую сторону. Он отбрасывает дробную часть числа. А метод Math.ceil() округляет в большую сторону. Он отбрасывает дробную часть, а к целой части прибавляет единицу. Пример:

Случайное число

Метод Math.random() генерирует псевдо-случайное число в диапазоне от 0 до 1. При этом ровно 1 не бывает, число вегда будет меньше.

Обычно случайное число нужно получить в каком-то конкретном диапазоне. Для этого можно использовать формулу:

случайное число = минимум + Math.random() * (максимум — минимум)

Для примера выведем число в диапазоне от -2 до 5:

Конечно, 5 — (-2) это 5+2.

Не завбывайте, что число 5 Вы в этой формуле не получите. Максимальное будет 4.999999999. Полученные значения можно округлить до нужной точности.

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

целое число = Math.floor (минимум + Math.random() * (максимум+1 — минимум))

Выведем числа от 10 до 15:

Сравнение дробных чисел

У математических вычислений есть одна особенность — их результат не всегда абсолютно точный. Это проблема не только JavaScript, но и большинства языков программирования. Так происходит потому, что числа и другие данные переводятся в двоичный код, и только потом с ними производятся вычисления.

В большинстве случаев это не приводит к особенным трудностям, просто в результате расчётов иногда получается число с большим количеством знаков после запятой. Но есть ситуация, когда неточность вычислений влияет на работу программы. Это сравнение чисел. Если сравниваются разные числа, то здесь всё будет нормально.

Но если при вычислении получаются два одинаковых дробных числа, то результат их сравнения не предсказуем. Они могут быть равны, либо одно может быть больше другого. Когда в скрипте используется такое сравнение, то нужно проверять, правильно ли работает скрипт. Если в нём есть ошибка, то нужно округлять значения, которые сравниваются.

Остальные математические методы

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

МетодЗначение
Math.pow(x, y)Возводит x в степень y
Math.exp(x)Экспонента числа x
Math.sqrt(x)Квадратный корень из числа x
Math.log(x)Натуральный логорифм числа x
Math.abs(x)Модуль числа x
Math.max(a, b, c)Максимальное из чисел
Math.min(a, b, c)Минимальное из чисел
Math.sin(x)Синус числа x
Math.cos(x)Косинус числа x
Math.tan(x)Тангенс числа x

Попробуйте произвести какие-нибудь вычисления с использованием этих методов.

Коприрование материалов сайта возможно только с согласия администрации

Работа с числами и математическими методами в JavaScript

Подборка самых важных и часто используемых методов работы с числами и математическими функциями в JavaScript с примерами.

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

Основы работы с числами

  • В JavaScript существует всего один числовой тип. Таким образом, значения 5 и 5.12 принадлежат к одному и тому же типу.
  • JS использует формат 64-битных чисел двойной точности по стандарту IEEE 754.

Это означает, что все числа в JavaScript имеют плавающую запятую. Пусть вас не обманывает запись var x = 1 , на самом деле это float, равный 1.0 .

Если вы действительно хотите разобраться в особенностях чисел в JS, загляните сюда:

А в этой статье мы сконцентрируемся на методах работы со значениями типа Number.

Создание чисел

Объявить переменную, содержащую числовое значение, можно с помощью ключевых слов let (если она будет изменяться) или const (если не будет). Перед отрицательными числами ставится — :

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

Будьте осторожны с ограничениями по размеру:

Конвертация в число:

Можно работать и в других системах счисления:

Важные принципы

  • все числа – с плавающей точкой;
  • все числа имеют один тип — «number»;
  • как и в других языках, в JS существуют ограничения по максимальному размеру и точности чисел.

Основные методы

Безопасные числа

Скорее всего, вы хотите, чтобы значение числа всегда оставалось тем же самым, что вы ему задали. Но если вы используете в коде, к примеру, число 900719925474099164 оно превратится в 900719925474099200. Дело в том, что оно выходит за пределы так называемого безопасного диапазона.

Узнать эти пределы можно, обратившись к свойствам объекта Number MIN_SAFE_INTEGER и MAX_SAFE_INTEGER. А с помощью функции Number.isSafeInteger можно определить, является ли число безопасным.

Целое ли число?

Используйте метод isInteger объекта Number . Если число не имеет десятичной части, он возвращает true . Обратите внимание, что числа с пустой десятичной частью автоматически конвертируются в целые.

Есть более короткий, но менее читаемый способ проверить, целое ли число:

Изменение количества знаков после запятой

Используйте метод Number.toFixed , который принимает количество знаков десятичной части, а возвращает строковое представление числа в нужном формате.

Также можно воспользоваться методом Number.toPrecision , которому нужно передать количество значащих цифр числа. На выходе также получается строка:

Преобразование в экспоненциальную форму

Экспоненциальная форма известна также известна как научная нотация. Для преобразования существует специальный метод toExponential . Его единственный необязательный параметр – количество цифр после запятой.

Глобальные функции для работы с числами и методы Number

Вы, возможно, знаете, что существуют глобальные функции вроде parseInt , но только что мы использовали Number.parseInt() .

Дело в том, что последний стандарт JavaScript пытается модуляризировать глобальные сущности и обновляет некоторые существующие модули. Например, метод isNaN отличается от нового метода Number.isNaN .

Работа с большими числами

Тип BigInt на данный момент находится в статусе предложения и недоступен в ряде браузеров. Большие числа создаются путем добавления n в конец числа или с помощью конструктора.

Пока нет полной поддержки BigInt, вы можете использовать библиотеку bignumber.js.

Преобразование в другую систему счисления

Перевести число из десятичной системы в другую можно с помощью метода toString , указав желаемое основание системы (от 2 до 36). Для обратного преобразования используйте метод parseInt :

Методы числовых литералов

Возможно, вы попытались применить какой-нибудь метод к числовому литералу ( 23.toString(2) ) и получили синтаксическую ошибку. Это связано со специфическим представлением чисел в JavaScript. Валидная форма для числа 23 — 23. или 23.0 (0 в дробной части можно не указывать).

Когда вы пишете 23.toString(2) JavaScript считает эту запись числом и не понимает, что вызывается метод.

Решением может быть использование скобок или двух точек для указания дробной части (хотя это довольно непонятная запись):

Не число – это число

Подробное объяснение этого феномена можно найти в статье JS Essentials: Types & Data Structures.

Коротко говоря, NaN является объектом класса Number, но определяется как результат математических операций, значение которых количественно число не является. Правильнее было бы назвать его Invalid Number.

NaN превращает все, с чем имеет дело, в NaN .

Проверка на NaN

Это единственное значение в JavaScript, которое не равно самому себе. Мы можем использовать это, применяя проверку x !== x . Если это условие возвращает true , то x – это NaN .

Помимо этого можно использовать методы Object.is , isNaN и новый метод Number.isNaN . Обратите внимание, два последних метода ведут себя по-разному с нечисловыми значениями.

Способы округления чисел

Возведение в степень

В JavaScript существует специальный оператор степени – ** . Также можно воспользоваться методом Math.pow .

Генерация случайного числа

Метод Math.random генерирует дробное число в диапазоне от 0 (включая) до 1 (не включая).

Вот небольшой пример: создадим сет – набор уникальных значений, заполним его случайными числами с помощью метода getRandom и отсортируем:

Математические функции

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

Ссылка на основную публикацию
Adblock
detector