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.
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.
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
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);
}
Kevinleary.net
Lodash hat ein round
Methode:
_.round(4.006);
// => 4
_.round(4.006, 2);
// => 4.01
_.round(4060, -2);
// => 4100
rostig
Sie können einfach Folgendes tun:
let n = 1.25
let result = Number(n).toFixed(1)
// output string: 1.3
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.
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
Math.round(n * 10) / 10
funktioniert. Wie lautet Ihr Code?– Ben
8. September 2011 um 4:02
Zu Ihrer Information Developer.mozilla.org/en/JavaScript/Reference/Global_Objects/…
– Ray Toal
8. September 2011 um 4:06