wake-up-neo.com

Erhalten Sie mit JavaScript einen dezimalen Teil einer Zahl

Ich habe Float-Nummern wie 3.2 und 1.6.

Ich muss die Zahl in den ganzzahligen und dezimalen Teil aufteilen. Ein Wert von 3.2 würde beispielsweise in zwei Zahlen aufgeteilt, d. H. 3 und 0.2.

Den ganzzahligen Teil zu erhalten ist einfach:

n = Math.floor(n);

Aber ich habe Probleme, den Dezimalanteil zu bekommen ... Ich habe folgendes versucht:

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

Es funktioniert aber nicht immer richtig.

Der vorherige Code hat folgende Ausgabe:

n = 3.1 => remainer = 1.1

Was fehlt mir hier?

194
Oscar

Verwenden Sie 1, nicht 2.

js> 2.3 % 1
0.2999999999999998
295
var decimal = n - Math.floor(n)

Obwohl dies bei Minuszahlen nicht funktioniert, müssen wir dies möglicherweise tun

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

Sie könnten in einen String konvertieren, oder?

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

Wie ist 0.2999999999999998 eine akzeptable Antwort? Wenn ich der Fragesteller wäre, würde ich eine Antwort von .3 wünschen. Was wir hier haben, ist falsche Präzision, und meine Experimente mit Floor,% usw. zeigen an, dass Javascript für diese Operationen eine falsche Präzision ist. Ich denke, dass die Antworten, die die Konvertierung in String verwenden, auf dem richtigen Weg sind. 

Ich würde das machen:

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

Ich benutzte 100233.1 und wollte die Antwort ".1". 

27
jomofrodo

So mache ich es, was meiner Meinung nach der einfachste Weg ist, dies zu tun:

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

Eine einfache Möglichkeit, dies zu tun, ist:

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

Leider liefert das nicht den genauen Wert. Das ist jedoch leicht zu beheben:

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

Sie können dies verwenden, wenn Sie die Anzahl der Dezimalstellen nicht kennen:

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

9
Ethan

Das folgende funktioniert unabhängig von den regionalen Einstellungen für Dezimaltrennzeichen. Unter der Bedingung wird nur ein Zeichen für ein Trennzeichen verwendet.

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

Es ist nicht hübsch, aber es stimmt.

5
cdmdotnet

Sprachunabhängiger Weg:

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

beachten Sie, dass es nur für Zahlen mit einer gebrochenen Länge gilt. 

4
Nurlan

Sie können es in einen String konvertieren und die Ganzzahl durch die replace-Methode durch Null ersetzen und das Ergebnis anschließend in eine Zahl zurückkonvertieren: 

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

Abhängig von der Nutzung geben Sie danach nach, aber diese einfache Lösung kann Ihnen auch helfen. 

Ich sage nicht, dass es eine gute Lösung ist, aber für einige konkrete Fälle funktioniert

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

Es wird jedoch länger dauern als die vorgeschlagene Lösung von @Brian M. Hunt

(2.3 % 1).toFixed(4)
4
David Sánchez

Wenn Präzision wichtig ist und Sie konsistente Ergebnisse benötigen, finden Sie hier einige Vorschläge, die den Dezimalteil einer Zahl als Zeichenfolge zurückgeben, einschließlich der führenden "0". Wenn Sie es als Float benötigen, fügen Sie am Ende einfach var f = parseFloat( result ) hinzu.

Wenn der Dezimalteil gleich Null ist, wird "0.0" zurückgegeben. Null-, NaN- und undefinierte Nummern werden nicht getestet.

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

Hier ist ein jsPerf-Link: https://jsperf.com/decpart-of-number/

Wir können sehen, dass Satz 2 der Schnellste ist.

3

Sie können die Funktion parseInt() verwenden, um den ganzzahligen Teil abzurufen, und den dezimalen Teil zu extrahieren

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

Ich hatte einen Fall, in dem ich wusste, dass alle fraglichen Zahlen nur eine Dezimalstelle haben würden, und wollte den Dezimalteil als Ganzzahl erhalten, also habe ich diese Art von Ansatz verwendet:

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

Dies funktioniert auch mit ganzen Zahlen, wobei in diesen Fällen 0 zurückgegeben wird.

1
walpek

Ich benutze:

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

Eingabe: -556,123444444

Ergebnis: 123444444

1
DavidDunham

Obwohl ich sehr spät dran bin, schauen Sie sich bitte den Code an.

let floatValue = 3.267848;
let decimalDigits = floatValue.toString().split('.')[1];
let decimalPlaces = decimalDigits.length;
let decimalDivider = Math.pow(10, decimalPlaces);
let fractionValue = decimalDigits/decimalDivider;
let integerValue = floatValue - fractionValue;

console.log("Float value: "+floatValue);
console.log("Integer value: "+integerValue);
console.log("Fraction value: "+fractionValue)
0
Hifzur Rahman

Nachdem ich einige davon angeschaut habe, verwende ich jetzt ...

var rtnValue = Number(7.23);
var tempDec = ((rtnValue / 1) - Math.floor(rtnValue)).toFixed(2);
0
Patrick
n = Math.floor(x);
remainder = x % 1;
0
masterxilo

Mathematikfunktionen sind schneller, geben jedoch immer keine nativen erwarteten Werte zurück. Der einfachste Weg, den ich gefunden habe, ist

(3.2+'').replace(/^[-\d]+\./, '')
0
Vasilii Suricov