Wie rundet man eine Zahl in Javascript auf Zehntel genau auf?

Lesezeit: 4 Minuten

Benutzeravatar von cyberfly
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 Marshalls Benutzeravatar
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

Benutzer-Avatar von suryakiran
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 Longs Benutzeravatar
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.

function roundNumber(rnum, rlength) { 
    var newnumber = Math.round(rnum * Math.pow(10, rlength)) / Math.pow(10, rlength);
    return newnumber;
}

alert(roundNumber(678.91011,2)); // returns 678.91

function ceilNumber(rnum, rlength) { 
    var newnumber = Math.ceil(rnum * Math.pow(10, rlength)) / Math.pow(10, rlength);
    return newnumber;
}

alert(ceilNumber(678.91011,2)); // returns 678.92

Zhuliens Benutzeravatar
zhulien

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.

Behnams Benutzeravatar
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

1454490cookie-checkWie rundet man eine Zahl in Javascript auf Zehntel genau auf?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy