In JavaScript ist die typische Methode zum Runden einer Zahl auf N Dezimalstellen wie folgt:
function roundNumber(num, dec) {
return Math.round(num * Math.pow(10, dec)) / Math.pow(10, dec);
}
Dieser Ansatz wird jedoch auf maximal N Dezimalstellen gerundet, während ich immer auf N Dezimalstellen runden möchte . Zum Beispiel würde "2.0" auf "2" gerundet.
Irgendwelche Ideen?
toFixed()
( developer.mozilla.org/En/Core_JavaScript_1.5_Reference/… ) verwenden, aber im IE ist es fehlerhaft : stackoverflow.com/questions/661562/… ; Sie müssen Ihre eigene Version schreiben ...Antworten:
Das ist kein Rundungsproblem, das ist ein Anzeigeproblem. Eine Zahl enthält keine Informationen zu signifikanten Ziffern. Der Wert 2 entspricht 2.0000000000000. Wenn Sie den gerundeten Wert in eine Zeichenfolge umwandeln, wird eine bestimmte Anzahl von Ziffern angezeigt.
Sie können einfach Nullen nach der Zahl einfügen, etwa:
(Beachten Sie, dass dies voraussetzt, dass die regionalen Einstellungen des Clients Punkt als Dezimaltrennzeichen verwenden. Der Code benötigt etwas mehr Arbeit, um für andere Einstellungen zu funktionieren.)
quelle
toFixed()
Dezimalstellen am Ende nach dem Runden?1.02449999998.toFixed(4)
kehre korrekt zurück1.0245
.Ich denke, dass es einen einfacheren Ansatz für alle hier gegebenen gibt und die Methode
Number.toFixed()
bereits in JavaScript implementiert ist.schreibe einfach:
etc...
quelle
toFixed()
Gibt eine Zeichenfolge zurück.Ich habe einen Weg gefunden. Dies ist Christophs Code mit einem Fix:
Lesen Sie hier die Details zum Wiederholen eines Zeichens mit einem Array-Konstruktor , wenn Sie neugierig sind, warum ich "+ 1" hinzugefügt habe.
quelle
Es gibt immer einen besseren Weg, um Dinge zu tun.
Ich möchte eine Genauigkeit von vier Stellen erhalten: 51,94
mach einfach:
Das Ergebnis ist: 51,94
quelle
PHP-ähnliche Rundungsmethode
Mit dem folgenden Code können Sie Ihre eigene Version von Math.round zu Ihrem eigenen Namespace hinzufügen, der einen Präzisionsparameter verwendet. Im Gegensatz zur Dezimalrundung im obigen Beispiel führt dies keine Konvertierung in und von Zeichenfolgen durch, und der Genauigkeitsparameter funktioniert genauso wie PHP und Excel, wobei eine positive 1 auf 1 Dezimalstelle und -1 auf die Zehner gerundet wird.
von Mozilla Developer Referenz für Math.round ()
quelle
Hoffentlich funktionierender Code (hat nicht viel getestet):
quelle
Ich denke unten Funktion kann helfen
Verwendung:
roundOff(600.23458,2);
wird zurückkehren600.23
quelle
Dies funktioniert zum Runden auf N Ziffern (wenn Sie nur auf N Ziffern kürzen möchten, entfernen Sie den Aufruf Math.round und verwenden Sie den Aufruf Math.trunc):
Ich musste in der Vergangenheit bei Java auf diese Logik zurückgreifen, als ich E-Slate-Komponenten für die Datenmanipulation verfasste . Das liegt daran, dass ich herausgefunden hatte, dass das mehrfache Hinzufügen von 0,1 zu 0 zu einem unerwartet langen Dezimalteil führen würde (dies liegt an der Gleitkomma-Arithmetik).
Ein Benutzerkommentar unter Formatnummer, bei dem immer 2 Dezimalstellen angezeigt werden, ruft diese Technikskalierung auf.
Einige erwähnen, dass es Fälle gibt, die nicht wie erwartet runden, und unter http://www.jacklmoore.com/notes/rounding-in-javascript/ wird stattdessen Folgendes vorgeschlagen:
quelle
Wenn Sie sich nicht wirklich für das Runden interessieren, fügen Sie einfach ein toFixed (x) hinzu und entfernen Sie gegebenenfalls nachfolgende 0en und den Punkt. Es ist keine schnelle Lösung.
quelle
format(1.2, 5)
und bekommen1.2
, während ich erwartet hatte1.20000
.