Rundes Doppel mit zwei Dezimalstellen in C #?


258

Ich möchte den doppelten Wert in c # auf zwei Dezimalstellen aufrunden. Wie kann ich das tun?

double inputValue = 48.485;

nach der Zusammenfassung

inputValue = 48.49;

Verwandte: c # - Wie runde ich einen Dezimalwert auf 2 Dezimalstellen (für die Ausgabe auf einer Seite)


Beachten Sie, dass Sie nicht alle Gleitkommawerte mit double darstellen können und dies Sie beim Runden stören kann
Liam

Antworten:


479

Das funktioniert:

inputValue = Math.Round(inputValue, 2);

Problemumgehung zum Abschneiden von float: float myTruncFloat = float.Parse (Math.Round (myFloat, 2) .ToString ());
Piero Alberto

1
Wenn der Wert 48.0000 ist. Es wird nicht 48.00 ergeben. double inputValue = 48.00; inputValue = Math.Round (inputValue, 2); wird nur 48 ergeben. Irgendein Warkaound?
user1926138

100
Math.Round(inputValue, 2, MidpointRounding.AwayFromZero)

4
Dies ist eigentlich, was verwendet werden sollte. Die meisten Operationen in Banken usw. werden mit dieser Methode durchgeführt (MidpointRounding.AwayFromZero).
MadBoy

41
Der Vorschlag, dass Banken Doppel verwenden, ist beängstigend. Verwenden Sie keine Näherungswerte für die Währung.
Raggi

6
@raggi Ich fürchte, einige (Banken) tun ... Das würde eine Menge
Dinge

4
Ja, ich glaube, das war es, was der Film 'Office Space' gemacht hat, nachdem er Bruchteile von Cent abgerundet hatte, die niemand bemerken würde. Ein guter Punkt, um vorsichtig zu sein, wann die Rundung willkürlich verwendet werden soll.
Atconway

1
Und als Teil der Handlung eines der originalen Superman-Filme ist das schon lange her.
James Westgate

25

Du solltest benutzen

inputvalue=Math.Round(inputValue, 2, MidpointRounding.AwayFromZero)

Math.Round

Math.Round rundet einen Gleitkommawert mit doppelter Genauigkeit auf eine bestimmte Anzahl von Bruchstellen.

MidpointRounding

Gibt an, wie mathematische Rundungsmethoden eine Zahl verarbeiten sollen, die auf halbem Weg zwischen zwei Zahlen liegt.

Grundsätzlich nimmt die obige Funktion Ihren Eingabewert und rundet ihn auf 2 (oder die von Ihnen angegebene Zahl) Dezimalstellen. Mit MidpointRounding.AwayFromZerowenn eine Zahl ist , auf halbem Weg zwischen zwei anderen, wird es in Richtung der runden nächste Zahl , die von Null weg. Es gibt auch eine andere Option, die Sie verwenden können, um auf die nächste gerade Zahl zu runden.


25

Eine andere einfache Möglichkeit besteht darin, ToString mit einem Parameter zu verwenden. Beispiel:

float d = 54.9700F;    
string s = d.ToString("N2");
Console.WriteLine(s);

Ergebnis:

54.97

19

Verwenden Sie Math.Round

value = Math.Round(48.485, 2);

Schlagen Sie mich dazu (obwohl ich dort auch ein
Reed Copsey

1
Seien Sie jedoch vorsichtig mit MidpointRounding: "Wenn der Wert der ersten Ziffer rechts von der Dezimalstelle der Ziffern 5 beträgt, wird die Ziffer in der Ziffernposition aufgerundet, wenn sie ungerade ist, oder unverändert gelassen, wenn sie gerade ist."
Matthias

8

Sie können eine von unten versuchen. Es gibt viele Möglichkeiten dafür.

1. 
 value=Math.Round(123.4567, 2, MidpointRounding.AwayFromZero) //"123.46"
2.
 inputvalue=Math.Round(123.4567, 2)  //"123.46"
3. 
 String.Format("{0:0.00}", 123.4567);      // "123.46"
4. 
string.Format("{0:F2}", 123.456789);     //123.46
string.Format("{0:F3}", 123.456789);     //123.457
string.Format("{0:F4}", 123.456789);     //123.4568

Ich habe die vierte Option verwendet. Das Schreiben von F6 hat bei mir besser funktioniert als das Aufschreiben von 6 Nullen ;-)
Maurice Klimek

2

Verwenden Sie eine interpolierte Zeichenfolge. Dadurch wird eine aufgerundete Zeichenfolge generiert:

var strlen = 6;
$"{48.485:F2}"

Ausgabe

"48.49"
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.