Runden Sie die Zahlen nach dem Komma auf 2 Stellen


81

Ich habe keine Ahnung, wie das geht? Ich füge Komma-Zahlen hinzu, das Ergebnis ist natürlich immer eine Zahl mit viel zu vielen Ziffern nach dem Komma. jemand?


1
Bei einigen Gebietsschemas werden Kommas durch Punkte ersetzt.
DOK

@Matt - dies ist Teil des jParseFloat-Plugins, es wird Teil von jQuery Core in 1.5 sein!
Nick Craver

Antworten:


105

EDIT 2 :

Verwenden Sie die Methode des NumberObjekts toFixedwie folgt:

var num = Number(0.005) // The Number() only visualizes the type and is not needed
var roundedString = num.toFixed(2);
var rounded = Number(roudedString); // toFixed() returns a string (often suitable for printing already)

Es rundet 42.0054321 bis 42.01

Es rundet 0,005 bis 0,01

Es rundet -0,005 auf -0,01 (der absolute Wert steigt also beim Runden an der Grenze von 0,5)

jsFiddle Beispiel


1
@Sten - Komma oder Dezimalzahl? Ihre Frage und Ihr Beispiel stimmen nicht überein.
Nick Craver

11
Dieses Beispiel funktioniert nicht, wenn Sie eine Zahl, beispielsweise 0,007, auf zwei Dezimalstellen runden möchten. Das Ergebnis ist: Math.round (0,007) -> 0,000 und dann toFixed (2) -> 0,00. Der eigentliche Rundungsprozess sollte 0,01 ergeben.
Andrei

9
downvote: Die Antwort ist falsch, da Math.round () die Zahl rundet und dadurch alle Dezimalstellen entfernt. Alles, was toFixed (2) dann tut, ist, zwei nachfolgende Nullen hinzuzufügen. Nur number.toFixed (2) reicht aus.
HammerNL

1
Es sollte etwas unternommen werden, da diese Antwort falsch ist und andere Personen die Kommentare möglicherweise nicht lesen, bevor sie die akzeptierte Antwort blind verwenden.
Pedro Moreira

1
−1: 3.1415wird 3.00in deinem Beispiel.

103

UPDATE: Beachten Sie, dass die Balgfunktion toFixed () zum Zeitpunkt der Erstellung der Antwort im Jahr 2010 etwas anders funktionierte. toFixed () scheint jetzt einige Rundungen vorzunehmen, jedoch nicht auf rein mathematische Weise. Also sei vorsichtig damit. Machen Sie Ihre Tests ... Die unten beschriebene Methode macht eine gute Rundung, wie es der Mathematiker erwarten würde.

  • toFixed()- Die Methode konvertiert eine Zahl in eine Zeichenfolge, wobei eine bestimmte Anzahl von Dezimalstellen beibehalten wird. Eine Zahl wird nicht aufgerundet, sondern abgeschnitten.
  • Math.round(n)- rundet eine Zahl auf die nächste ganze Zahl. So drehen:

0,5 -> 1; 0,05 -> 0

Wenn Sie also runden möchten, sagen Sie die Zahl 0,55555 nur auf die zweite Dezimalstelle. Sie können Folgendes tun (dies ist ein schrittweises Konzept):

  • 0.55555 * 100 = 55,555
  • Math.Round(55.555) -> 56.000
  • 56.000 / 100 = 0,56000
  • (0.56000).toFixed(2) -> 0,56

und das ist der Code:

(Math.round(number * 100)/100).toFixed(2);

Ich benutze die gleiche Methode. Funktioniert
super

Verursachte Probleme für Beispiele, wenn Sie bereits mit gewünschten Ziffern nach dem Koma wie> (Math.round (123.12124 * 100) / 100) .toFixed (4) schweben; ===> 123.1200
Alendorff

1
Sie haben vergessen, die Rundungsmathematik wie folgt zu ändern: Math.round (123.12124 * 10000) / 10000) .toFixed (4). Dies ist der Fall, wenn Sie auf die 4. Dezimalstelle runden möchten.
Andrei

Fehler: toFixed () tut um die Zahl , so dass es kein Abschneiden ist. Siehe developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
MikeB

Geht nicht für 1.005
Len Joseph

54

Das hat bei mir funktioniert:

var new_number = float.toFixed(2);

Beispiel:

var my_float = 0.6666

my_float.toFixed(3) # => 0.667

Ich denke , das Problem dabei ist , dass es nicht „rund“ die Zahl, so 0.6666.toFixed(3)wird 0.666statt 0.667. @Andrei scheint die richtige Lösung für die richtige Rundung zu haben.
Joshua Pinter

1
Ha! Keine Ursache. Ich habe es gerade getestet und toFixed()funktioniert perfekt : 0.6666.toFixed(3) # => 0.667. Ich werde es Ihrer Antwort hinzufügen.
Joshua Pinter

3
Am kürzesten und am besten. Dies sollte die akzeptierte Antwort sein.

12

Frühere Antworten haben vergessen, die Ausgabe erneut als Zahl einzugeben. Es gibt verschiedene Möglichkeiten, dies zu tun, je nach Ihrem Geschmack.

+my_float.toFixed(2)

Number(my_float.toFixed(2))

parseFloat(my_float.toFixed(2))

1
Dies ist meiner Meinung nach die beste Antwort. Es ist einfach, kurz und das Ergebnis ist eine NUMMER
Kar.ma

Ich mag die "+" Notation, sehr elegant
Jibeee

4

Dies ist nicht wirklich CPU-freundlich, aber:

Math.round(number*100)/100

funktioniert wie erwartet.


2

Obwohl wir hier viele Antworten mit vielen nützlichen Vorschlägen haben, fehlen bei jedem noch einige Schritte.
Hier ist also eine Komplettlösung in kleinen Funktionen:

function roundToTwoDigitsAfterComma(floatNumber) {
    return parseFloat((Math.round(floatNumber * 100) / 100).toFixed(2));
}

Nur für den Fall, dass Sie interessiert sind, wie das funktioniert:

  1. Mit 100 multiplizieren und dann runden, um die Genauigkeit von 2 Stellen nach dem Komma beizubehalten
  2. Teilen Sie zurück in 100 und verwenden Sie toFixed(2), um 2 Ziffern nach dem Komma zu behalten und andere nicht nützliche Teile zu werfen
  3. Konvertieren Sie es zurück in float, indem Sie stattdessen die parseFloat()Funktion als toFixed(2)Rückgabezeichenfolge verwenden

Hinweis: Wenn Sie die letzten zwei Ziffern nach dem Komma behalten, weil Sie mit Geldwerten arbeiten und Finanzberechnungen durchführen , denken Sie daran, dass dies keine gute Idee ist und Sie stattdessen lieber ganzzahlige Werte verwenden sollten.


1

Verwenden Sie den folgenden Code.

alert(+(Math.round(number + "e+2")  + "e-2"));

2
Diese Antwort entspricht im Wesentlichen den anderen Antworten auf diese 7 Jahre alte Frage, nutzt jedoch auf sehr dunkle Weise die impliziten Typkonvertierungen von Javascript aus. Welche Eigenschaften dieses Codes haben Sie überzeugt, ihn hier zu veröffentlichen?
U354356007

Die Qualität dieser Antwort ist, dass ich etwas Neues gelernt habe, von dem ich nichts über JS wusste
;-)

0

Ich benutze das:

function round(value, precision) {

	if(precision == 0)
		return Math.round(value);  	

	exp = 1;
	for(i=0;i<precision;i++)
		exp *= 10;

	return Math.round(value*exp)/exp;
}

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.