2010-04-13 13 views
31

Ich habe ein Spiel erstellt, das am Ende des Spiels eine Punktzahl gibt, aber das Problem ist, dass dieses Ergebnis manchmal eine Zahl mit vielen Nachkommastellen ist (wie 87.124563563566). Wie würde ich den Wert abrunden oder abrunden, damit ich etwas wie 87.12 haben könnte?Runden von Werten nach oben oder unten in C#

Danke!

+10

Warum gibt es so eine große Prämie auf eine Frage wie diese? – zxgear

+5

Und warum so viele upvotes auf eine Antwort, die nur auf ganze Zahlen runden, wenn die Frage ein Beispiel mit zwei Dezimalstellen gibt? – CupawnTae

+1

@JohnH Es scheint, dass das Kopfgeld-Poster in der vergangenen Woche eine Kopfgeld-Party gemacht hat. – OhBeWise

Antwort

36

Versuchen Sie mit Math.Round. Seine verschiedenen Überladungen erlauben es Ihnen, anzugeben, wie viele Ziffern Sie möchten und wie Sie möchten, dass die Zahl rund ist.

+14

Und wahrscheinlich möchten Sie 'Math.Round (87.123453563566, 2, MidpointRounding.AwayFromZero);'. –

5
double test2 = 87.2345524523452; 
double test3 = Math.Round(test2, 2); 
84

Verwenden Math.Ceiling(87.124563563566) oder Math.Floor(87.124563563566) für immer Aufrunden oder Abrunden. Ich glaube, das geht auf die nächste ganze Zahl.

+1

Dies ist genau das, was ich suchte, die Funktionen, die das gleiche wie Excel ROUNDUP & ROUNDOWN Funktionen tun. Danke vielmals! –

6

Sie möchten nur die Zeichenfolge formatieren, nicht die Punktzahl zu verfälschen.

3

Die Nummer ist für double Art der Variable und mathematisch korrekt.
Sie haben zwei gut etablierte Lösungen, um solche Situationen zu vermeiden.

  1. String Lösung: Wenn Sie die Anzahl an Benutzern zeigen, tun Sie es einfach: variable.ToString ("0.00"). Der ToString schneidet nur die Nummer.
  2. Rundungslösung: Wenn Sie die Rundung steuern möchten, können Sie die Bibliothek Math verwenden.

ich Sie wissen wollen, warum Sie dieses „weird“ Nummer sehen, können Sie dort lesen: irrational numbers

1

ich Kommentare nicht genug Ruf hinzuzufügen, also muss ich eine Antwort erstellen. Aber timurid ist richtig, nur die Zeichenfolge formatieren.

Ich glaube, das, was Sie suchen ist:

var myScore = 87.124563563566 
var toShowOnScreen = myScore.ToString("0.00"); 

Einige der benutzerdefinierten Möglichkeiten, um Ihre Werte zu formatieren hier beschrieben werden: https://msdn.microsoft.com/en-US/library/7x5bacwt(v=vs.80).aspx

0

Viele Leute befürworten Sie die Math verwenden Bibliothek, um Ihre Nummer zu runden, aber selbst das kann zu sehr kleinen Rundungsfehlern führen. Math.Round kann und manchmal Zahlen mit einer Anzahl von abschließenden Nullen und sehr kleinen Rundungsfehlern zurückgeben. Dies liegt daran, dass Floats und Doubles intern immer noch als Binärzahlen dargestellt werden und es daher oft schwierig ist, bestimmte kleine Dezimalzahlen sauber darzustellen.

Ihre beste Möglichkeit ist, um entweder nur die Verwendung Zeichenfolge Formatierung oder, wenn Sie es tatsächlich rund tun wollen, kombinieren die beiden:

Math.Round(val, 2).ToString("0.00") 
8

Zur Abrundung immer nach unten auf 2 Dezimalstellen:

decimal score = 87.126; 
Math.Floor(score * 100)/100; // 87.12 

zur Abrundung immer bis zu 2 Dezimalstellen:

decimal score = 87.124; 
Math.Ceiling(score * 100)/100; // 87.13 
Verwandte Themen