Wie rundet man eine Zahl in Javascript auf Zehntel genau auf?
Lesezeit: 4 Minuten
Cyberfly
Ich möchte Javascript verwenden, um eine Zahl aufzurunden. Da es sich bei der Zahl um eine Währung handelt, möchte ich, dass sie wie in diesen Beispielen aufgerundet wird (2 Dezimalstellen):
192.168 => 192,20
192.11 => 192,20
192,21 => 192,30
192,26 => 192,30
192,20 => 192,20
Wie erreicht man dies mit Javascript? Die integrierte Javascript-Funktion rundet die Zahl basierend auf der Standardlogik auf (weniger und mehr als 5 zum Aufrunden).
Andrew Marshall
/**
* @param num The number to round
* @param precision The number of decimal places to preserve
*/
function roundUp(num, precision) {
precision = Math.pow(10, precision)
return Math.ceil(num * precision) / precision
}
roundUp(192.168, 1) //=> 192.2
@AndrewMarshall, was ist der Zweck der Multiplikation und der anschließenden Division durch 10?
– Codecowboy
7. Januar 2013 um 18:23
@codecowboy Wenn nicht, dann ceil() werde dir geben 193Daher müssen wir sicherstellen, dass die gesamte Genauigkeit, die wir beibehalten möchten, vor dem Dezimalpunkt liegt. Dann führen wir die umgekehrte Operation durch, um den „ursprünglichen“ Wert wiederherzustellen.
– Andrew Marshall
7. Januar 2013 um 23:22
Wenn Sie eine Nummer wie bekommen 192.19999999999997Ihr könnt euch bewerben .toFixed(1) zum num
– Flamer.ohr
8. März 2016 um 2:37
Und für diejenigen hier, die sich fragen, wie man auf die nächste GANZE Zahl aufrundet: Sie brauchen nur Math.ceil(). Der Rest besteht nur darin, mit Dezimalzahlen umzugehen. Um anderen die Zeit zu ersparen, die mein Gehirn dafür brauchte!
– Benutzer2493235
30. April 2016 um 10:59
ACHTUNG, DIESE FUNKTION IST NICHT VOLLSTÄNDIG GENAU! RoundUp(1.09, 2) gibt 1.1 zurück, was falsch ist! Die erwartete Antwort ist immer noch 1,09.
– Samer
12. Mai 2020 um 21:28
Normales Runden funktioniert mit einer kleinen Änderung:
Math.round(price * 10)/10
und wenn Sie ein Währungsformat beibehalten möchten, können Sie die Zahlenmethode verwenden .toFixed()
(Math.round(price * 10)/10).toFixed(2)
Obwohl es dadurch zu einem String wird =)
Math.round(192,11 * 100)/100 -> 192,11
– krtek
4. März 2011 um 7:57
Beim zweiten muss nicht gerundet werden, es ist eher so price.toFixed(2)
– Michael Krelin – Hacker
4. März 2011 um 7:58
@Krtek ups, danke, dass du das verstanden hast. Ich habe die Frage falsch verstanden. Antwort aktualisiert.
– Shad
4. März 2011 um 7:59
Das OP fragte, wie man eine Zahl aufrundet, daher sollte hier Math.ceil anstelle von Math.round verwendet werden.
– Kloddant
4. April 2016 um 13:38
Suryakiran
Etwas spät, aber zu diesem Zweck kann eine wiederverwendbare Javascript-Funktion erstellt werden:
// Arguments: number to round, number of decimal places
function roundNumber(rnum, rlength) {
var newnumber = Math.round(rnum * Math.pow(10, rlength)) / Math.pow(10, rlength);
return newnumber;
}
Rufen Sie die Funktion auf als
alert(roundNumber(192.168,2));
Das funktioniert großartig, aber das OP hat gefragt, wie man eine Zahl aufrundet, daher sollte hier Math.ceil anstelle von Math.round verwendet werden.
– Kloddant
4. April 2016 um 14:02 Uhr
Diese Antwort ist besser als die akzeptierte Antwort, wenn Sie trotz der angestrebten Dezimalstelle richtig aufrunden möchten. Beispiel: 1,054 -> 1,05 1,055 -> 1,06 Hier ist jedoch ein Randfall: 1,005 -> 1 1,006 -> 1,01 UND 1,015 -> 1,01 1,016 -> 1,02 Seien Sie also vorsichtig.
– Jay K
1. März 2017 um 4:41
Hoàng Long
Ganz in der Nähe Das Auge Antwort, aber ich ändere eine Kleinigkeit, damit es funktioniert:
var num = 192.16;
console.log( Math.ceil(num * 10) / 10 );
Das OP erwartet zwei Dinge:
A. auf die höheren Zehntel aufzurunden, und
B. um eine Null an der Hundertstelstelle anzuzeigen (ein typisches Bedürfnis bei Währungen).
Um beide Anforderungen zu erfüllen, scheint für jede der oben genannten Anforderungen eine separate Methode erforderlich zu sein. Hier ist ein Ansatz, der auf der von Suryakiran vorgeschlagenen Antwort aufbaut:
//Arguments: number to round, number of decimal places.
function roundPrice(rnum, rlength) {
var newnumber = Math.ceil(rnum * Math.pow(10, rlength-1)) / Math.pow(10, rlength-1);
var toTenths = newnumber.toFixed(rlength);
return toTenths;
}
alert(roundPrice(678.91011,2)); // returns 679.00
alert(roundPrice(876.54321,2)); // returns 876.60
Wichtiger Hinweis: Diese Lösung führt bei negativen und exponentiellen Zahlen zu einem ganz anderen Ergebnis.
Um diese Antwort mit zwei sehr ähnlichen Antworten zu vergleichen, sehen Sie sich die folgenden beiden Ansätze an. Beim ersten wird einfach wie üblich auf das nächste Hundertstel gerundet, beim zweiten wird einfach auf das nächste Hundertstel (größer) aufgerundet.
Ok, das wurde beantwortet, aber ich dachte, Sie möchten vielleicht meine Antwort sehen, die das aufruft math.pow() Funktion einmal. Ich schätze, ich mag es, Dinge trocken zu halten.
function roundIt(num, precision) {
var rounder = Math.pow(10, precision);
return (Math.round(num * rounder) / rounder).toFixed(precision)
};
Es fügt irgendwie alles zusammen. Ersetzen Math.round() mit Math.ceil() Aufrunden statt Abrunden, was das OP wollte.
Behnam
Diese Funktion begrenzt die Dezimalzahl ohne runde Zahl
function limitDecimal(num,decimal){
return num.toString().substring(0, num.toString().indexOf('.')) + (num.toString().substr(num.toString().indexOf('.'), decimal+1));
}
Als kürzere Alternative: return ( ” + num ).split(‘.’).shift()
– Yogi
27. November 2015 um 20:49 Uhr
Danke Roberto, dieser Code funktioniert, aber entferne alle Dezimalstellen
– Behnam
29. November 2015 um 7:31 Uhr
14544900cookie-checkWie rundet man eine Zahl in Javascript auf Zehntel genau auf?yes