Rundes Doppel mit zwei Dezimalstellen in C #?

Antworten:

479

Das funktioniert:

inputValue = Math.Round(inputValue, 2);
Alex LE
quelle
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)
Nandin
quelle
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.

Gage
quelle
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
Diwas
quelle
19

Verwenden Sie Math.Round

value = Math.Round(48.485, 2);
rekursiv
quelle
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
reza.cse08
quelle
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"
Bigpony
quelle