Получить дробную часть числа с помощью 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 ответов
var decimal = n - Math.floor(n)
хотя это не минус, так что мы могли бы сделать
n = Math.abs(n); // Change to positive
var decimal = n - Math.floor(n)
Как 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