Отбросить дробную часть javascript
Получить дробную часть числа с помощью JavaScript
у меня есть плавающие числа, такие как 3.2 и 1.6 .
мне нужно разделить число в целой и дробной части. Например, значение 3.2 будет разделен на два числа, т. е. 3 и 0.2
получить целочисленную часть легко:
но у меня возникли проблемы с получением дробную часть. Я пробовал это:
но это не всегда работает правильно.
предыдущий код имеет следующий вывод:
чего мне здесь не хватает?
16 ответов
использовать 1 , а не 2 .
хотя это не минус, так что мы могли бы сделать
вы можете преобразовать в строку, верно?
Как 0.299999999999999998 приемлемый ответ? Если бы я спрашивал, я бы хотел получить ответ .3. Здесь мы имеем ложную точность, и мои эксперименты с floor, % и т. д. показывают, что Javascript любит ложную точность для этих операций. Поэтому я думаю, что ответы, которые используют преобразование в строку, находятся на правильном пути.
Я бы сделал так:
в частности, я использовал 100233.1, и я хотел получить ответ «.1».
самый простой способ сделать это:
к сожалению, это не вернет точное значение. Однако, это легко исправить:
вы можете использовать это, если вы не знаете число десятичных знаков:
вот как я это делаю, и я думаю, что это самый простой способ сделать это:
следующее работает независимо от региональных настроек десятичного разделителя. при условии, что для разделителя используется только один символ.
это не красиво, но это точно.
вы можете преобразовать его в строку и использовать replace метод для замены целочисленной части нулем, а затем преобразовать результат обратно в число:
в зависимости от использования вы дадите потом, но это простое решение также может помочь вам.
Я не говорю, что это хорошее решение, но для некоторых конкретных случаев работает
но это займет больше времени, чем предлагаемое решение @Brian M. Hunt
независимый от языка способ:
обратите внимание, что он корректен только для чисел с одной фрактиоанальной длиной )
если точность имеет значение, и Вам требуются согласованные результаты, вот несколько предложений, которые вернут десятичную часть любого числа в виде строки, включая ведущий «0.». Если вам это нужно, как поплавок, просто добавить var f = parseFloat( result ) в конце.
если десятичная часть равна нулю, будет возвращено «0.0». Null, NaN и неопределенные числа не тестируются.
1. Матрица.сплит
2. Строка.подстрока, строка.метод indexOf
3. Математика.этаж, номер.toFixed, String.метод indexOf
4. Математика.этаж, номер.toFixed, String.сплит
мы видим, что предложение №2 является самым быстрым.
можно использовать parseInt() функция для получения целочисленной части, чем использовать это для извлечения десятичной части
У меня был случай, когда я знал, что все рассматриваемые числа будут иметь только один десятичный знак и хотел получить десятичную часть как целое число, поэтому я использовал такой подход:
это хорошо работает и с целыми числами, возвращая 0 в этих случаях.
Javascript отбросить дробную часть
0 Jake [2016-02-18 12:51:00]
Мне нужно отбросить дробную часть числа в узле, но я не могу получить правильный результат!
Это легко сделать в C:
Как я могу сделать это в узле?
обратите внимание: someFunction (2.305 * 100) должен быть равен 230!
Некоторые тесты в узле:
1 ответ
1 Решение user1121883 [2016-02-18 13:05:00]
Для этого нет хороших обходных путей. Большинство десятичных дробей не могут быть представлены точно как двоичные дроби. Подробнее здесь: https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
Установите decimal fron npm: npm install decimal и используйте следующее:
В этой статье подробно рассмотрим числа, математические операторы, способы преобразования числа в строку и наоборот, а также много других важных моментов.
Функция isFinite
Функция isFinite позволяет проверить, является ли аргумент конечным числом.
В качестве ответа данная функция возвращает false , если аргумент является Infinity , -Infinity , NaN или будет быть приведён к одному из этих специальных числовых значений. В противном случае данная функция вернёт значение true .
Кроме глобальной функции isFinite в JavaScript имеется ещё метод Number.isFinite . Он в отличие от isFinite не осуществляет принудительное приведения аргумента к числу.
Функция isNaN
Функция isNaN предназначена для определения того, является ли аргумент числом или может ли быть преобразован к нему. Если это так, то функция isNaN возвращает false. В противном случае она возвращает true.
Если это действие нужно выполнить без приведения типа, то используйте метод Number.isNaN . Данный метод был введён в язык, начиная с ECMAScript 6.
Как явно преобразовать строку в число?
Явно привести строку в число можно посредством следующих способов:
1. Использовать унарный оператор + , который необходимо поместить перед значением.
Этот способ пренебрегает пробелами в начале и конце строки, а также
(переводом строки).
Используя данный способ необходимо обратить внимание на то, что пустая строка или строка, состоящая из пробелов и
, переводится в число 0. Кроме этого она также преобразует тип данных null и логические значения к числу.
2. Функция parseInt . Данная функция предназначена для преобразования аргумента в целое число . В отличие от использования унарного оператора + , данный метод позволяет преобразовать строку в число, в которой не все символы являются цифровыми . Начинает она преобразовывать строку, начиная с первого символа. И как только она встречает символ, не являющийся цифровым, данная функция останавливает свою работу и возвращает полученное число.
Данная функция может работать с разными системами счисления (двоичной, восьмеричной, десятичной, шестнадцатеричной). Указание основание системы счисления осуществляется посредством 2 аргумента.
Кроме этого рекомендуется, всегда указывать основание системы счисления и не полагаться на значение по умолчанию установленное этой функции, например в том или ином браузере.
Кроме функции parseInt в JavaScript имеется метод Number.parseInt . Данный метод ничем не отличается от функции parseInt и был введён в JavaScript со спецификацией ECMASCRIPT 2015 (6).
3. Функция parseFloat . Функция parseFloat аналогична parseInt , за исключением того что позволяет выполнить преобразование аргумента в дробное число.
Кроме этого функция parseFloat в отличие от parseInt не имеет 2 аргумента, и следовательно она всегда пытается рассмотреть строку как число в десятичной системе счисления.
Кроме функции parseFloat в JavaScript имеется метод Number.parseFloat . Данный метод ничем не отличается от функции parseFloat и был введён в JavaScript со спецификацией ECMASCRIPT 2015 (6).
Преобразование числа в строку
Превратить число в строку можно с помощью метода toString .
Метод toString позволяет также указать основание системы счисления с учётом которой необходимо явно привести число к строке:
Как проверить является ли переменная числом
Определить является ли значение переменной числом можно используя один из следующих способов:
1. С использованием функций isNaN и isFinite:
Этот способ позволяет определить является ли указанное значение числом или может быть приведено к нему. Данный вариант не считает числом пустую строку, строку из пробелов, значение null , Infinity , -Infinity , true и false .
2. С использованием оператора typeof и функций isFinite, isNaN:
Эта функция определяет имеет ли указанное значение тип Number, а также не принадлежит ли оно к одному из специальных значений Infinity, -Infinity и NaN. Эсли это так, то данная функция возвращает значение true.
3. С помощью метода ECMAScript 6 Number.isInteger(value) . Данный метод позволяет определить, является ли указанное значение целым числом.
Чётные и нечётные числа
Проверить является ли число чётным или нечётным можно посредством следующих функций:
Но перед тем как проводить такую проверку желательно убедиться что указанное значение является числом:
Простые числа в Javascript
Рассмотрим пример в котором выведем с помощью Javascript простые числа от 2 до 100.
Округление числа в Javascript
Округлить дробное число до целого значения в JavaScript можно различными способами.
1. Используя специально предназначенные для этого методы Math.floor , Math.ceil и Math.round . Метод Math.floor округляет дробное число до ближайшего целого вниз, т.е. попросту отбрасывает дробную часть. Math.ceil скругляет дробное число до ближайшего целого вверх. Math.round округляет число вверх или вниз в зависимости от значения дробной части. Если дробная часть больше или равно 0.5, то вверх, иначе скруление осуществляется вниз.
2. С помощью метода toFixed(точность) . Данный метод округляет дробную часть числа до заданной точности. Результат округления возвращает в виде строки.
Если знаков после запятой для формирования указанной точности числа не хватает, то оно дополняется нулями.
3. Посредством метода toPrecision(точность) . Данный метод представляет число с указанной точностью. При этом он может округлить не только дробную, но и целую часть числа. Полученное число данный метод может представить в зависимости от результата с фиксированной запятой или в экспоненциальной форме.
4. Используя логические операторы НЕ или ИЛИ.
Целая и дробная часть числа
Получить целую часть числа можно используя метод Math.floor() и parseInt() :
Получить дробную часть числа можно воспользовавшимся оператором процент ( % ). Данный оператор возвращает остаток, который будет получен от деления первого числа на второе. В данном случае в качестве 2 числа необходимо использовать 1.
Кроме этого дробную часть можно получить также с помощью вычислений:
Делится ли число нацело
Определить делится ли число нацело можно используя оператор процента:
Форматирование чисел
В JavaScript отформатировать вывод числа в соответствии с региональными стандартами (языковыми настройками операционной системы) позволяет метод toLocaleString() .
Например, выполним форматирование числа в соответствии с региональными стандартами, которые установлены в системе по умолчанию:
Например, выполним форматирование числа в соответствии с региональными стандартами России (ru):
Данный метод можно также использовать для форматирования числа в виде валюты:
Представление числа в виде процентов:
Разбить число на разряды (свойство useGrouping ):
Вывести с число с определённым количеством цифр (2) после запятой:
Сравнение чисел
Для сравнения чисел в JavaScript используются следующие операторы: == (равно), != (не равно), > (больше), (меньше), >= (больше или равно), (меньше или равно).
Например, сравним два числа:
При сравнении чисел с дробной частью необходимо учитывать погрешности, которые могут возникать во время этих вычислений.
Например, в JavaScript сумма чисел (0.2 + 0.4) не равна 0.6:
Погрешности происходят потому что все вычисления компьютер или другое электронное устройство производит в 2 системе счисления. Т.е. перед тем как выполнить какие-то действия компьютер сначала должен преобразовать представленные в выражении числа в 2 систему счисления. Но, не любое дробное десятичное число можно представить в 2 системе счисления точно.
Например, число 0.2510 в двоичную систему преобразуется точно.
Например, число 0.210 можно преобразовать в 2 систему только с определённой точностью:
В результате эти погрешности скажутся при вычисления суммы двух чисел и результатах сравнения. Т.е. получится что на самом деле JavaScript будет видет эту запись следующим образом:
При вычислениях или отображении чисел с дробной частью необходимо всегда указывать точность, с которой это необходимо делать.
Например, сравнить числа до 2 знаков после запятой используя методы toFixed() и toPrecision() :
Основные математические операции
В JavaScript существуют следующие математические операторы: + (сложение), — (вычитание), * (умножение), / (деление), % (остаток от деления), ++ (увелить значение на 1), — (уменьшить значение на 1).
Кроме этого в JavaScript есть комбинированные операторы: x+=y ( x=x+y ), x-=y ( x=x-y ), x*=y ( x=x*y ), x/=y ( x=x/y ), x%=y ( x=x%y ).
у меня есть плавающие числа, такие как 3.2 и 1.6 .
мне нужно разделить число в целой и дробной части. Например, значение 3.2 будет разделен на два числа, т. е. 3 и 0.2
получить целочисленную часть легко:
но у меня возникли проблемы с получением дробную часть. Я пробовал это:
но это не всегда работает правильно.
предыдущий код имеет следующий вывод:
чего мне здесь не хватает?
16 ответов
использовать 1 , а не 2 .
хотя это не минус, так что мы могли бы сделать
вы можете преобразовать в строку, верно?
Как 0.299999999999999998 приемлемый ответ? Если бы я спрашивал, я бы хотел получить ответ .3. Здесь мы имеем ложную точность, и мои эксперименты с floor, % и т. д. показывают, что Javascript любит ложную точность для этих операций. Поэтому я думаю, что ответы, которые используют преобразование в строку, находятся на правильном пути.
Я бы сделал так:
в частности, я использовал 100233.1, и я хотел получить ответ «.1».
самый простой способ сделать это:
к сожалению, это не вернет точное значение. Однако, это легко исправить:
вы можете использовать это, если вы не знаете число десятичных знаков:
вот как я это делаю, и я думаю, что это самый простой способ сделать это:
следующее работает независимо от региональных настроек десятичного разделителя. при условии, что для разделителя используется только один символ.
это не красиво, но это точно.
вы можете преобразовать его в строку и использовать replace метод для замены целочисленной части нулем, а затем преобразовать результат обратно в число:
в зависимости от использования вы дадите потом, но это простое решение также может помочь вам.
Я не говорю, что это хорошее решение, но для некоторых конкретных случаев работает
но это займет больше времени, чем предлагаемое решение @Brian M. Hunt
независимый от языка способ:
обратите внимание, что он корректен только для чисел с одной фрактиоанальной длиной )
если точность имеет значение, и Вам требуются согласованные результаты, вот несколько предложений, которые вернут десятичную часть любого числа в виде строки, включая ведущий «0.». Если вам это нужно, как поплавок, просто добавить var f = parseFloat( result ) в конце.
если десятичная часть равна нулю, будет возвращено «0.0». Null, NaN и неопределенные числа не тестируются.
мы видим, что предложение №2 является самым быстрым.
можно использовать parseInt() функция для получения целочисленной части, чем использовать это для извлечения десятичной части
У меня был случай, когда я знал, что все рассматриваемые числа будут иметь только один десятичный знак и хотел получить десятичную часть как целое число, поэтому я использовал такой подход:
это хорошо работает и с целыми числами, возвращая 0 в этих случаях.
Методы округления чисел в 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 » , подготовленной дружной командой проекта Интернет-технологии.ру