Получить десятичную часть числа с помощью JavaScript - PullRequest
208 голосов
/ 22 декабря 2010

У меня есть числа с плавающей точкой, такие как 3.2 и 1.6.

Мне нужно разделить число на целое и десятичное число. Например, значение 3.2 будет разделено на два числа, то есть 3 и 0.2

Получить целую часть легко:

n = Math.floor(n);

Но у меня проблемы с получением десятичной части. Я пробовал это:

remainer = n % 2; //obtem a parte decimal do rating

Но это не всегда работает правильно.

Предыдущий код имеет следующий вывод:

n = 3.1 => remainer = 1.1

Что мне здесь не хватает?

Ответы [ 19 ]

309 голосов
/ 22 декабря 2010

Используйте 1, а не 2.

js> 2.3 % 1
0.2999999999999998
81 голосов
/ 22 декабря 2010
var decimal = n - Math.floor(n)

Хотя это не сработает для минус чисел, поэтому нам, возможно, придется сделать

n = Math.abs(n); // Change to positive
var decimal = n - Math.floor(n)
67 голосов
/ 22 декабря 2010

Вы можете конвертировать в строку, верно?

n = (n + "").split(".");
29 голосов
/ 13 марта 2014

Как 0.2999999999999998 является приемлемым ответом?Если бы я был спрашивающим, я бы хотел получить ответ .3.Здесь мы имеем ложную точность, и мои эксперименты с floor,% и т. Д. Показывают, что Javascript любит ложную точность для этих операций.Поэтому я думаю, что ответы, использующие преобразование в строку, находятся на правильном пути.

Я бы сделал это:

var decPart = (n+"").split(".")[1];

В частности, я использовал 100233.1 и хотел получить ответ ".1".

12 голосов
/ 18 июня 2016

Простой способ сделать это:

var x = 3.2;
var decimals = x - Math.floor(x);
console.log(decimals); //Returns 0.20000000000000018

К сожалению, это не возвращает точное значение.Однако это легко исправить:

var x = 3.2;
var decimals = x - Math.floor(x);
console.log(decimals.toFixed(1)); //Returns 0.2

Вы можете использовать это, если не знаете количество десятичных знаков:

var x = 3.2;
var decimals = x - Math.floor(x);

var decimalPlaces = x.toString().split('.')[1].length;
decimals = decimals.toFixed(decimalPlaces);

console.log(decimals); //Returns 0.2
12 голосов
/ 04 марта 2017

Вот как я это делаю, и я думаю, что это самый простой способ сделать это:

var x = 3.2;
int_part = Math.trunc(x); // returns 3
float_part = Number((x-int_part).toFixed(2)); // return 0.2
5 голосов
/ 11 июля 2017

Если точность имеет значение и вам требуются согласованные результаты, вот несколько предложений, которые будут возвращать десятичную часть любого числа в виде строки, включая начальный «0». Если вам это нужно как поплавок, просто добавьте var f = parseFloat( result ) в конце.

Если десятичная часть равна нулю, будет возвращено «0.0». Ноль, NaN и неопределенные числа не проверяются.

1. String.split

var nstring = (n + ""),
    narray  = nstring.split("."),
    result  = "0." + ( narray.length > 1 ? narray[1] : "0" );

2. String.substring, String.indexOf

var nstring = (n + ""),
    nindex  = nstring.indexOf("."),
    result  = "0." + (nindex > -1 ? nstring.substring(nindex + 1) : "0");

3. Math.floor, Number.toFixed, String.indexOf

var nstring = (n + ""),
    nindex  = nstring.indexOf("."),
    result  = ( nindex > -1 ? (n - Math.floor(n)).toFixed(nstring.length - nindex - 1) : "0.0");

4. Math.floor, Number.toFixed, String.split

var nstring = (n + ""),
    narray  = nstring.split("."),
    result  = (narray.length > 1 ? (n - Math.floor(n)).toFixed(narray[1].length) : "0.0");

Вот ссылка на jsPerf: https://jsperf.com/decpart-of-number/

Мы видим, что предложение № 2 самое быстрое.

5 голосов
/ 18 июня 2015

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

var n = 2015.15;
var integer = Math.floor(n).toString();
var strungNumber = n.toString();
if (integer.length === strungNumber.length)
  return "0";
return strungNumber.substring(integer.length + 1);

Это не красиво, но точно.

4 голосов
/ 22 января 2016

Независимый от языка способ:

var a = 3.2;
var fract = a * 10 % 10 /10; //0.2
var integr = a - fract; //3

обратите внимание, что это верно только для чисел с одной длиной фракции)

4 голосов
/ 24 июля 2014

В зависимости от использования, которое вы дадите позже, но это простое решение также может помочь вам.

Я не говорю, что это хорошее решение, но для некоторых конкретных случаев работает

var a = 10.2
var c = a.toString().split(".")
console.log(c[1] == 2) //True
console.log(c[1] === 2)  //False

Но это займет больше времени, чем предложенное @Brian M. Hunt

(2.3 % 1).toFixed(4)
...