Können Sie eine Zahl in Javascript auf 1 Zeichen nach dem Dezimalpunkt runden (richtig gerundet)?
Ich habe die * 10, round, / 10 ausprobiert, aber am Ende des int bleiben zwei Dezimalstellen.
javascript
rounding
Gehhilfe
quelle
quelle
Math.round(n * 10) / 10
funktioniert. Was ist dein Code?Antworten:
Math.round(num * 10) / 10
funktioniert, hier ist ein Beispiel ...Wenn Sie möchten, dass es eine Dezimalstelle hat, auch wenn dies eine 0 wäre, fügen Sie ...
BEARBEITEN: Runde mit Präzisionsfunktion hinzufügen ...
Nach diesem Prinzip dient hier als Referenz eine praktische kleine runde Funktion, die Präzision erfordert ...
... Verwendungszweck ...
... wird standardmäßig auf die nächste ganze Zahl gerundet (Genauigkeit 0) ...
... und kann verwendet werden, um auf die nächsten 10 oder 100 usw. zu runden ...
... und korrekter Umgang mit negativen Zahlen ...
... und kann mit toFixed kombiniert werden, um konsistent als Zeichenfolge zu formatieren ...
quelle
.toFixed()
da es eine Zeichenfolge zurückgibt, wenn Sie möglicherweise eine Zahl möchten.parseFloat
Dezimalstellen die verbleibenden Dezimalstellen entfernt,.toFixed()
wenn es sich um eine ganze Zahl (Nullen) handelt. Wenn Sie rechnen möchten, folgen Sie im Allgemeinen Ihrem ersten Beispiel. Wenn Sie eine Nummer in Ihrer Benutzeroberfläche anzeigen möchten, verwenden Sie.toFixed()
..toFixed()
da dies für verschiedene Browser unterschiedliche Rundungsergebnisse liefern kann. Lesen Sie diesen Beitrag für Details zum Thema!quelle
toFixed()
gibt es Pannen - ich habe es in einem Chrome-Browser gesehen, in dem ich anrufetoFixed()
, dann in eine Zeichenfolge konvertiere, und es zeigt etwas wie10.00000000068
- seltsam. Kann dies jedoch nicht zuverlässig reproduzieren..toFixed()
da es ein zurückgibt,String
wenn Sie vielleicht einNumber
Wenn Sie verwenden, erhalten
Math.round(5.01)
Sie5
statt5.0
.Wenn Sie verwenden
toFixed
Sie laufen in Rundungsprobleme .Wenn Sie das Beste aus beiden Welten wollen, kombinieren Sie beide:
Möglicherweise möchten Sie eine Funktion dafür erstellen:
quelle
lodash
hat eineround
Methode:Docs .
Quelle .
quelle
Ich stimme dafür
toFixed()
, aber für die Aufzeichnung ist hier eine andere Möglichkeit, die Bitverschiebung verwendet, um die Zahl in ein Int umzuwandeln. Es wird also immer gegen Null gerundet (für positive Zahlen nach unten, für negative nach oben).Aber hey, da es keine Funktionsaufrufe gibt, ist es schnell böse. :) :)
Und hier ist eine, die String-Matching verwendet:
Ich empfehle nicht, die String-Variante zu verwenden, nur sayin.
quelle
Versuchen Sie es damit:
weniger kompliziert und einfacher zu implementieren ...
Damit können Sie eine Funktion erstellen, die Folgendes ausführt:
Code-Snippet anzeigen
BEARBEITEN : siehe hier So runden Sie mit ROUND HALF UP. Rundungsmodus, den die meisten von uns in der Grundschule gelernt haben
quelle
x = Zahl, n = Dezimalstellen:
quelle
Warum nicht einfach
quelle
quelle
So vervollständigen Sie die beste Antwort:
Die Eingabeparameternummer kann "nicht" immer eine Zahl sein, in diesem Fall existiert .toFixed nicht.
quelle
ES 6-Version der akzeptierten Antwort:
quelle
Verwenden der toPrecision-Methode:
quelle
12.345.toPrecision( 2 )
ist"12"
.Wenn Ihre Methode nicht funktioniert, geben Sie bitte Ihren Code ein.
Sie können die Abrundungsaufgabe jedoch wie folgt ausführen:
Wird Ihnen 234,56 geben
Ähnlich
Wird 234,5 geben
Auf diese Weise können Sie eine Variable anstelle der oben verwendeten Konstante verwenden.
quelle
Kleiner Winkelfilter, wenn jemand es will:
Verwenden Sie, wenn über:
:) :)
quelle
Im Allgemeinen erfolgt die Rundung durch Skalierung:
round(num / p) * p
Bei Verwendung der Exponentialschreibweise wird die Rundung von + ve Zahlen korrekt behandelt. Bei dieser Methode werden Kantenfälle jedoch nicht korrekt gerundet.
Hier ist auch eine Funktion, die ich geschrieben habe, um arithmetische Rundungen durchzuführen. Sie können sie selbst testen.
quelle
Dies scheint bei allem, was ich darauf werfe, zuverlässig zu funktionieren:
Es wird abgerundet, sodass Sie es möglicherweise je nach Anwendungsfall ändern müssen. Das sollte funktionieren:
quelle
Wenn Ihnen die richtige Aufrundung wichtig ist, dann:
Wenn Sie dies nicht tun, haben Sie bereits eine Antwort von früheren Beiträgen
quelle
Math.round( num * 10) / 10
funktioniert nichtZum Beispiel
1455581777.8-145558160.4
gibt Ihnen1310023617.3999999
.Also nur benutzen
num.toFixed(1)
quelle
Ich habe eine erstellt, die den Zahlentyp zurückgibt und auch nur Dezimalstellen setzt, wenn dies erforderlich ist (keine 0-Auffüllung).
Beispiele:
Der Code:
quelle
Ich habe einen Weg gefunden, um die Präzisionsprobleme zu vermeiden:
quelle
Vielen Dank
quelle