Ich möchte meine Zahlen so formatieren, dass immer 2 Dezimalstellen angezeigt werden, gegebenenfalls gerundet.
Beispiele:
number display
------ -------
1 1.00
1.341 1.34
1.345 1.35
Ich habe dies verwendet:
parseFloat(num).toFixed(2);
Aber es wird angezeigt 1
als1
statt 1.00
.
Antworten:
Live-Demo
Code-Snippet anzeigen
Beachten Sie, dass es auf 2 Dezimalstellen gerundet wird , sodass die Eingabe
1.346
zurückkehrt1.35
.quelle
1
als1.00
und1.341
als anzeigen1.34
.(+num).toFixed(2)
. Es behält sogar den Rundungsfehler im Original bei, siehe Nates Antwort .Code-Snippet anzeigen
quelle
1.34
AusdruckNumber(1.345).toFixed(2)
.1.345
ist ein Beispiel für eine Zahl, die nicht genau im Gleitkomma gespeichert werden kann. Ich denke, der Grund dafür, dass sie nicht wie erwartet rundet, ist, dass sie tatsächlich leicht als Zahl gespeichert ist weniger als 1,345 und es rundet ab. Wenn Sie stattdessen mit testen(1.34500001).toFixed(2)
dann sehen Sie es abrundet richtig1.35
Diese Antwort schlägt fehl, wenn
value = 1.005
.Als bessere Lösung kann das Rundungsproblem vermieden werden, indem Zahlen in Exponentialschreibweise verwendet werden:
Saubererer Code, wie von @Kon und dem ursprünglichen Autor vorgeschlagen:
Sie können
toFixed()
am Ende hinzufügen , um den Dezimalpunkt beizubehalten, z. B.:1.00
Beachten Sie jedoch, dass er als Zeichenfolge zurückgegeben wird.Gutschrift: Runden von Dezimalstellen in JavaScript
quelle
toFixed
dieses Rundungsproblem vorliegt. Ihre Antwort sollte die akzeptierte sein.Number(Math.round(parseFloat(value + 'e' + decimalPlaces)) + 'e-' + decimalPlaces)
quelle
toPrecision
formatiert die Zahl nur auf eine bestimmte Anzahl von Dezimalstellen, wobei redundante Stellen einfach weggelassen, aber nicht gerundet werden . Dies könnte natürlich auch sehr nützlich sein, aber es ist wichtig, den Unterschied zu verstehen.(20.55).toPrecision(3) "20.6"
toFixed
:const formattedVal = Number(val.toFixed(2));
Verwenden Sie keinetoPrecision
, da es die nicht-Dezimalzahlen zählt , wenn die Genauigkeit param verwenden.Erstellen Sie für die genaueste Rundung diese Funktion:
und verwenden Sie es, um auf 2 Dezimalstellen zu runden:
Dank Razu , diesem Artikel und der Math.round-Referenz von MDN .
quelle
Verwenden Sie für moderne Browser
toLocaleString
:Geben Sie ein Gebietsschema-Tag als ersten Parameter an, um das Dezimaltrennzeichen zu steuern . Verwenden Sie für einen Punkt beispielsweise das englische US-Gebietsschema:
was gibt:
Die meisten Länder in Europa verwenden ein Komma als Dezimaltrennzeichen. Wenn Sie also beispielsweise das Gebietsschema Schwedisch / Schweden verwenden:
es wird geben:
quelle
Einfachste Antwort:
Beispiel: http://jsfiddle.net/E2XU7/
quelle
toFixed
wurde bereits in stackoverflow.com/a/13292833/218196 vorgeschlagen . Welche zusätzlichen Informationen enthält Ihre Frage?toFixed
Eine Nummer anrufen .Eine viel allgemeinere Lösung zum Runden auf N Stellen
quelle
roundN(-3.4028230607370965e+38,2)
kehrt"-3.4028230607370965e+38"
anstelle der erwarteten 0,00 zurückhttps://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat
quelle
Wenn Sie jQuery bereits verwenden, können Sie das jQuery-Nummernformat verwenden Plugin .
Das Plugin kann formatierte Zahlen als Zeichenfolge zurückgeben, Sie können Dezimalstellen und Tausende von Trennzeichen festlegen und die Anzahl der anzuzeigenden Dezimalstellen auswählen.
Sie können das jQuery Number Format auch von GitHub herunterladen .
quelle
Ist es das was du meinst?
quelle
Konvertieren Sie eine Zahl in eine Zeichenfolge, wobei Sie nur zwei Dezimalstellen beibehalten:
Das Ergebnis von n ist:
quelle
Suchen Sie Boden?
quelle
quelle
Hier ist auch eine generische Funktion, die auf eine beliebige Anzahl von Dezimalstellen formatiert werden kann:
quelle
Wenn eine bestimmte Formatierung erforderlich ist, sollten Sie Ihre eigene Routine schreiben oder eine Bibliotheksfunktion verwenden, die genau das tut, was Sie benötigen. Die grundlegende ECMAScript-Funktionalität reicht normalerweise nicht aus, um formatierte Zahlen anzuzeigen.
Eine ausführliche Erklärung zum Runden und Formatieren finden Sie hier: http://www.merlyn.demon.co.uk/js-round.htm#RiJRundungen und Formatierungen sollten in der Regel nur als letzter Schritt vor der Ausgabe durchgeführt werden. Wenn Sie dies früher tun, kann dies zu unerwartet großen Fehlern führen und die Formatierung zerstören.
quelle
quelle
Laufen Sie einfach in diesen längsten Thread, unten ist meine Lösung:
Lassen Sie mich wissen, ob jemand ein Loch stechen kann
quelle
Code-Snippet anzeigen
quelle
parseFloat(num.toFixed(2))
Sie geben uns nicht das ganze Bild.
javascript:alert(parseFloat(1).toFixed(2))
zeigt 1,00 in meinen Browsern an, wenn ich es in die Positionsleiste einfüge. Wenn Sie jedoch danach etwas tun, wird es zurückgesetzt.quelle
quelle
Ich musste mich zwischen den Konvertierungen parseFloat () und Number () entscheiden, bevor ich toFixed () aufrufen konnte. Hier ist ein Beispiel für eine Zahlenformatierung nach der Erfassung von Benutzereingaben.
HTML:
Ereignishandler:
Der obige Code führt zu einer TypeError-Ausnahme. Beachten Sie, dass der HTML-Eingabetyp zwar "number" ist, die Benutzereingabe jedoch tatsächlich ein "string" -Datentyp ist. Die Funktion toFixed () kann jedoch nur für ein Objekt aufgerufen werden, das eine Zahl ist.
Mein endgültiger Code würde wie folgt aussehen:
Der Grund, warum ich mit Number () vs. parseFloat () umsetze, ist, dass ich weder für eine leere Eingabezeichenfolge noch für einen NaN-Wert eine zusätzliche Validierung durchführen muss. Die Number () -Funktion behandelt automatisch eine leere Zeichenfolge und verdeckt sie auf Null.
quelle
Ich mag:
Runden Sie die Zahl mit 2 Dezimalstellen und stellen Sie sicher, dass Sie sie analysieren
parseFloat()
, um Number und nicht String zurückzugeben, es sei denn, es ist Ihnen egal, ob es sich um String oder Number handelt.quelle
parseFloat("1.00") // 1
Extend Math Objekt mit Präzisionsverfahren
quelle
parseInt(number * 100) / 100;
arbeitete für mich.quelle
Hier ist eine andere Lösung, um nur mit Floor zu runden, dh sicherzustellen, dass der berechnete Betrag nicht größer als der ursprüngliche Betrag ist (manchmal für Transaktionen erforderlich):
quelle
Sie können diesen Code ausprobieren:
quelle
Versuchen Sie den folgenden Code:
quelle
quelle
So löse ich mein Problem:
quelle