Получить дробную часть числа с помощью JavaScript

у меня есть плавающие числа, такие как 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

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

16 ответов


использовать 1, а не 2.

js> 2.3 % 1
0.2999999999999998

var decimal = n - Math.floor(n)

хотя это не минус, так что мы могли бы сделать

n = Math.abs(n); // Change to positive
var decimal = n - Math.floor(n)

вы можете преобразовать в строку, верно?

n = (n + "").split(".");

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

Я бы сделал так:

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

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


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

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

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

var x = 3.2;
int_part = Math.trunc(x); // returns 3
float_part = Number((x-int_part).toFixed(2)); // return 0.2

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

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);

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


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

var number = 123.123812,
    decimals = +number.toString().replace(/^[^\.]+/,'0');

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

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

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)

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

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

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


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

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

1. Матрица.сплит

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

2. Строка.подстрока, строка.метод indexOf

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

3. Математика.этаж, номер.toFixed, String.метод indexOf

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

4. Математика.этаж, номер.toFixed, String.сплит

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 является самым быстрым.


можно использовать parseInt() функция для получения целочисленной части, чем использовать это для извлечения десятичной части

var myNumber = 3.2;
var integerPart = parseInt(myNumber);
var decimalPart = myNumber - integerPart;

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

var number = 3.1,
    decimalAsInt = Math.round((number - parseInt(number)) * 10); // returns 1

это хорошо работает и с целыми числами, возвращая 0 в этих случаях.


Я использую:

var n = -556.123444444;
var str = n.toString();
var decimalOnly = 0;

if( str.indexOf('.') != -1 ){ //check if has decimal
    var decimalOnly = parseFloat(Math.abs(n).toString().split('.')[1]);
}

вход: -556.123444444

результат: 123444444


после просмотра нескольких из них я теперь использую...

var rtnValue = Number(7.23);
var tempDec = ((rtnValue / 1) - Math.floor(rtnValue)).toFixed(2);

float a=3.2;
int b=(int)a; // you'll get output b=3 here;
int c=(int)a-b; // you'll get c=.2 value here