2017-09-18 8 views
1

Dies ist, was wie erwartet funktioniert:Parsing toLocaleString und zurück Präzision schweben zu verlieren

Diese parseFloat(newValue).toLocaleString("de-DE", { minimumFractionDigits: 2, maximumFractionDigits: 2 }) in einem String führen wird: "34.886,55"

Dies funktioniert nicht wie erwartet:

Für parseFloat("34.886,55") bekomme ich eine Nummer, aber ich habe alles nach dem Komma verloren: 34.886.

Wie kann ich dieses Problem beheben?

+0

parseFloat ("34.886,55") ist das Komma ungültig, so richtig die Parse-Anschlag vor sich her. Der Punkt ist auch das Dezimaltrennzeichen. – Salketer

+0

Mögliches Duplikat von [Javascript Parse Float ignoriert die Dezimalstellen nach meinem Komma] (https://stackoverflow.com/questions/7571553/javascript-parse-float-is-ignoring-the-decimals-after-my-comma) – evolutionxbox

+0

Warum nicht das Komma vor der Verarbeitung entfernen [Sample Geige] (https://jsfiddle.net/f0qwkxhn/) –

Antwort

0

Hier ist ein kurzes Beispiel für das Parsen von Zahlen ... Kommas sind nicht in Zahlen gültig, nur der Punkt steht für das Dezimaltrennzeichen. Wenn es gefunden wird, stoppt die String-Konvertierung, wie Sie im zweiten Protokoll sehen können. Überprüfen Sie auch das dritte Protokoll, ich habe eine Überprüfung für den Wert hinzugefügt, um wahr zu sein, wenn es kleiner als 100 ist, so dass es offensichtlich ist, dass Sie nicht mit tausend Trennzeichen aber wirklich Dezimal Trennzeichen spielen.

console.log(parseFloat("34.886.55")); 
 
console.log(parseFloat("34,886.55")); 
 
console.log(parseFloat("34.886,55"), parseFloat("34.886,55") < 100);

0

ich diese einfache Funktion zu tun locale based parseFloat, meines Wissens nach bestem schrieb, sind die Annahmen für diese Funktion.

  1. Der Dezimaloperator wird einmal kommen.
  2. So teilen Sie es an der Dezimalstelle ("," in our case), um zwei Elemente in einem Array zu erhalten.
  3. Entfernen Sie dann das Tausendertrennzeichen ("." in our case) für jedes der Elemente im Array.
  4. Dann verbinden Sie das Array mit dem Dezimaltrennzeichen ("." in our case)
  5. schließlich den parseFloat Wert dieser verbundenen Nummer zurück!

var str = "34.886,55" 
 
console.log("before: ", str); 
 
str = localeParseFloat(str, ",", "."); 
 
console.log("resulting floating value from the function: ", str); 
 

 
function localeParseFloat(str, decimalChar, separatorChar){ 
 
var out = []; 
 
str.split(",").map(function(x){ 
 
\t x = x.replace(".", ""); 
 
    out.push(x); 
 
}) 
 
out = out.join("."); 
 
return parseFloat(out); 
 
}
<script src="https://rawgit.com/eu81273/jsfiddle-console/master/console.js"></script>

Verwandte Themen