Wie rundet man in JavaScript auf eine Dezimalstelle?

Lesezeit: 4 Minuten

Walkers Benutzeravatar
Gehhilfe

Kann man in JavaScript eine Zahl auf ein Dezimalzeichen runden (richtig gerundet)?

Ich habe es mit *10, rund, /10 versucht, aber am Ende des int bleiben zwei Dezimalstellen übrig.

Benutzeravatar von Billy Moon
Billy Moon

Math.round(num * 10) / 10 funktioniert, und hier ist ein Beispiel …

var number = 12.3456789
var rounded = Math.round(number * 10) / 10
// rounded is 12.3

Wenn Sie möchten, dass es eine Dezimalstelle hat, auch wenn diese eine 0 wäre, dann fügen Sie … hinzu.

var fixed = rounded.toFixed(1)
// 'fixed' is always to one decimal point
// NOTE: .toFixed() returns a string!

// To convert back to number format
parseFloat(number.toFixed(2))
// 12.34
// but that will not retain any trailing zeros

// So, just make sure it is the last step before output,
// and use a number format during calculations!

Nach diesem Prinzip finden Sie hier als Referenz eine praktische kleine Rundungsfunktion, die Präzision erfordert …

function round(value, precision) {
    var multiplier = Math.pow(10, precision || 0);
    return Math.round(value * multiplier) / multiplier;
}

… Verwendung …

round(12345.6789, 2) // 12345.68
round(12345.6789, 1) // 12345.7

… wird standardmäßig auf die nächste ganze Zahl gerundet (Genauigkeit 0) …

round(12345.6789) // 12346

… und kann zum Runden auf die nächsten 10 oder 100 usw. verwendet werden …

round(12345.6789, -1) // 12350
round(12345.6789, -2) // 12300

… und der richtige Umgang mit negativen Zahlen …

round(-123.45, 1) // -123.4
round(123.45, 1) // 123.5

… und kann mit toFixed kombiniert werden, um konsistent als Zeichenfolge zu formatieren …

round(456.7, 2).toFixed(2) // "456.70"

  • Seien Sie vorsichtig bei der Verwendung .toFixed() da es eine Zeichenfolge zurückgibt, wenn Sie vielleicht eine Zahl möchten.

    – Cobby

    14. September 2012 um 5:25


  • Cool, offensichtlich nützlich parseFloat entfernt verbleibende Dezimalstellen .toFixed() wenn es eine ganze Zahl (Nullen) ist. Wenn Sie rechnen möchten, ist es im Allgemeinen am besten, Ihrem ersten Beispiel zu folgen. Wenn Sie eine Zahl in Ihrer Benutzeroberfläche anzeigen möchten, verwenden Sie .toFixed().

    – Cobby

    17. September 2012 um 1:12

  • Hmmm … das macht Sinn, bei jeder Konvertierung in eine Zahl müssen immer die fehlerhaften Nullen entfernt werden, weshalb es eine Zeichenfolge bleiben muss. Ich denke, es sollte immer der letzte Schritt vor der Anzeige sein und nicht in Berechnungen verwendet werden.

    – Billy Moon

    17. September 2012 um 10:22

  • Seien Sie vorsichtig bei der Verwendung .toFixed() da für verschiedene Browser möglicherweise unterschiedliche Rundungsergebnisse zurückgegeben werden. Lesen dieser Beitrag für Details zum Thema!

    – Welke

    4. März 2014 um 13:02 Uhr


  • Kann ich eine Null hinzufügen, wenn kein DP vorhanden ist?

    – Nick

    24. November 2016 um 12:34

var number = 123.456;

console.log(number.toFixed(1)); // should round to 123.5

  • Manchmal toFixed() hat Störungen – ich habe es in einem Chrome-Browser gesehen, in dem ich anrufe toFixed()dann in einen String konvertieren, und es wird etwa Folgendes angezeigt: 10.00000000068 – seltsam. Kann dies jedoch nicht zuverlässig reproduzieren.

    – Hamish Grubijan

    25. April 2013 um 21:45 Uhr


  • Ja, ich habe mit toFixed() selbst bei nur wenigen Dezimalstellen Störungen festgestellt. Wenn ich mich richtig erinnere, wurde der Bruch 4 auf die nächsthöhere statt auf eine niedrigere Zahl gerundet.

    – Dalibor

    30. Juni 2015 um 7:43

  • wie oben von @cobby erwähnt: Seien Sie vorsichtig bei der Verwendung .toFixed() wie es a zurückgibt String wenn du vielleicht ein willst Number

    – Ricardo

    25. Mai 2019 um 0:41


Benutzeravatar von Jasper de Vries
Jasper de Vries

Wenn du benutzt Math.round(5.01) Sie erhalten 5 anstatt 5.0.

Wenn du benutzt toFixed Sie stoßen auf Rundungsprobleme.

Wenn Sie das Beste aus beiden Welten wollen, kombinieren Sie beides:

(Math.round(5.01 * 10) / 10).toFixed(1)

Möglicherweise möchten Sie hierfür eine Funktion erstellen:

function roundedToFixed(input, digits){
  var rounder = Math.pow(10, digits);
  return (Math.round(input * rounder) / rounder).toFixed(digits);
}

Benutzeravatar von Kevinleary.net
Kevinleary.net

Lodash hat ein round Methode:

_.round(4.006);
// => 4

_.round(4.006, 2);
// => 4.01

_.round(4060, -2);
// => 4100

Dokumentation.

Quelle.

Rustys Benutzeravatar
rostig

Sie können einfach Folgendes tun:

let n = 1.25
let result = Number(n).toFixed(1)
// output string: 1.3

Benutzer-Avatar von Peter Mortensen
Peter Mortensen

Ich stimme dafür toFixed(), aber fürs Protokoll, hier ist eine andere Möglichkeit, die Bitverschiebung verwendet, um die Zahl in einen Int umzuwandeln. Es wird also immer gegen Null gerundet (nach unten für positive Zahlen, nach oben für negative).

var rounded = ((num * 10) << 0) * 0.1;

Aber hey, da es keine Funktionsaufrufe gibt, geht es verdammt schnell. 🙂 🙂

Und hier ist eine, die String-Matching verwendet:

var rounded = (num + '').replace(/(^.*?\d+)(\.\d)?.*/, '$1$2');

Ich empfehle nicht, die String-Variante zu verwenden, nur um es zu sagen.

Benutzer-Avatar von Peter Mortensen
Peter Mortensen

Versuchen Sie es damit:

var original = 28.453

// 1.- round "original" to two decimals
var result = Math.round (original * 100) / 100  // Returns 28.45

// 2.- round "original" to 1 decimal
var result = Math.round (original * 10) / 10  // Returns 28.5

// 3.- round 8.111111 to 3 decimals
var result = Math.round (8.111111 * 1000) / 1000  // Returns 8.111

Es ist weniger kompliziert und einfacher zu implementieren…

Damit können Sie eine Funktion erstellen, die folgende Aufgaben erledigt:

function RoundAndFix (n, d) {
    var m = Math.pow (10, d);
    return Math.round (n * m) / m;
}

function RoundAndFix (n, d) {
    var m = Math.pow (10, d);
    return Math.round (n * m) / m;
}
console.log (RoundAndFix(8.111111, 3));

Sehen So runden Sie mit ROUND HALF UP. Der Rundungsmodus wurde den meisten von uns in der Grundschule beigebracht.

  • Nein: RoundAndFix(1.005, 2) .

    – Nein

    4. Dezember 2014 um 17:56

  • Möglicherweise ist Strg + Umschalt + J erforderlich, um das Ergebnis anzuzeigen (und JavaScript zuzulassen). stacksnippets.net)

    – Peter Mortensen

    19. April um 10:00 Uhr


1454700cookie-checkWie rundet man in JavaScript auf eine Dezimalstelle?

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

Privacy policy