Konvertieren Sie eine JavaScript-Zeichenfolgenvariable in Dezimal / Geld

114

Wie können wir eine JavaScript-Zeichenfolgenvariable in eine Dezimalzahl konvertieren?

Gibt es eine Funktion wie:

parseInt(document.getElementById(amtid4).innerHTML)
Varada
quelle

Antworten:

240

Ja - parseFloat.

parseFloat(document.getElementById(amtid4).innerHTML);

Verwenden Sie zum Formatieren von Zahlen toFixed:

var num = parseFloat(document.getElementById(amtid4).innerHTML).toFixed(2);

num ist jetzt eine Zeichenfolge, deren Zahl mit zwei Dezimalstellen formatiert ist.

einsamer Tag
quelle
1
Können wir diese Variable mit 2 Dezimalstellen wie 120,50 machen? im Moment bekomme ich nur 120,5.
Varada
16
Um @PhilipWhitehouse zu zitieren: "Bitte verwenden Sie für alle, die dies in Zukunft lesen, nicht float, um Währung zu speichern. Sie verlieren an Genauigkeit und Daten. Sie sollten es als ganzzahlige Anzahl von Cent (oder Pennys usw.) speichern und dann vorher umrechnen." ausgeben. ". Quelle: stackoverflow.com/questions/149055/…
SSH Diesen
@SSHThis Soweit mir bekannt ist, hat JavaScript keinen Integer-Typ. Es gibt nur einen Zahlentyp, die alle intern als 64-Bit-Gleitkommazahlen gespeichert sind. Ihr Punkt gilt für andere Sprachen mit ganzzahligen Typen wie C #, C ++, aber nicht wirklich für JavaScript.
Simon Brangwin
1
@ SimonBrangwin Sein Punkt ist immer noch gültig, aber die Semantik kann verwirrend sein. Was er wirklich meint, ist "nur Währung als ganze Zahlen in Javascript speichern, da sie als Gleitkommazahlen gespeichert werden".
Josh Noe
Nur zur Erinnerung: parseFloat('22w')ist 22und parseFloat('w22')istNaN
IG Pascual
65

Sie können auch den NumberKonstruktor / die Funktion verwenden (kein Radix erforderlich und sowohl für Ganzzahlen als auch für Gleitkommazahlen verwendbar):

Number('09'); /=> 9
Number('09.0987'); /=> 9.0987

Alternativ, wie Andy E in den Kommentaren sagte, können Sie +für die Konvertierung verwenden

+'09'; /=> 9
+'09.0987'; /=> 9.0987
KooiInc
quelle
Dies wird von IE11
Pants
@Pants, bei dem es um Erweiterungen des in ES6 integrierten Number-Objekts geht , nicht um die VerwendungNumber
KooiInc
11

Das funktioniert:

var num = parseFloat(document.getElementById(amtid4).innerHTML, 10).toFixed(2);
Sanjay
quelle
2

Es ist ziemlich riskant, sich auf Javascript-Funktionen zu verlassen, um Zahlen zu vergleichen und damit zu spielen. In Javascript (0.1 + 0.2 == 0.3) wird aufgrund von Rundungsfehlern false zurückgegeben. Verwenden Sie die Bibliothek math.js.

dondrzzy
quelle
1

Ein einfacher kurzer Weg wäre die Verwendung von + x. Es hält das Vorzeichen sowie die Dezimalzahlen intakt. Die andere Alternative ist die Verwendung von parseFloat (x). Der Unterschied zwischen parseFloat (x) und + x besteht für eine leere Zeichenfolge. + X gibt 0 zurück, wobei parseFloat (x) NaN zurückgibt.

Tushar Sagar
quelle
1

Ich habe eine kleine Hilfsfunktion erstellt, um dies zu tun und alle fehlerhaften Daten abzufangen

function convertToPounds(str) { 
    var n = Number.parseFloat(str);
    if(!str || isNaN(n) || n < 0) return 0;
    return n.toFixed(2);
}

Demo ist da

Sidonaldson
quelle