2010-08-30 24 views
15

Mögliche Duplizieren:
c# - How do I round a decimal value to 2 decimal places (for output on a page)Runde doppelt auf zwei Dezimalstellen

Was ist der beste Weg, um eine Doppel auf zwei Dezimalstellen abzurunden und auch haben sie auf 2 Dezimalstellen festgelegt?

Beispiel: 2.346 -> 2,35, 2 -> 2.00

Ich hoffe, ich, so etwas zu vermeiden, in denen ich eine doppelte zu Zeichenfolge konvertieren und dann wieder zu einem Doppel, die wie eine schlechte Art und Weise scheint gehe darüber.

+5

Die zwei Dezimalstellen, wenn sie Null sind, sind eine visuelle/Repräsentations-Sache, etwas, an dem sich 'doppeltes' nichts interessiert. Sie müssen diese also unbedingt in Zeichenfolgen für die Anzeige konvertieren. –

+0

Sie haben Recht, danke. – Robert

Antwort

30
double someValue = 2.346;  
String.Format("{0:0.00}", someValue); 
+4

Sie müssen Math.Round hier nicht aufrufen. – phoog

4

Werfen Sie einen Blick auf Math.Round

+0

Math.Round fügt keine Nullen an. – Robert

+0

@Robert - sprechen Sie über Display? – ChrisF

+0

Ja für die Anzeige. – Robert

15

Rund um den Wert auf die gewünschte Präzision und dann formatieren. Ziehen Sie immer die Version von Math.Round vor, die den Mittelpunkt-Rundungsparameter enthält. Dieser Parameter legt fest, wie die Mittelwerte (5) als letzte Ziffer behandelt werden.

Wenn Sie AwayFromZero nicht als Wert für param angeben, erhalten Sie das Standardverhalten ToEven. Zum Beispiel mit Toeven als Methode Abrundung erhalten Sie:

Math.Round(2.025,2)==2.02 und

Math.Round(2.035,2)==2.04

stattdessen MidPoint.AwayFromZero param mit:

Math.Round(2.025,2,MidpointRounding.AwayFromZero)==2.03 und

Math.Round(2.035,2,MidpointRounding.AwayFromZero)==2.04

Also, für eine normale Runden, dann ist es am besten, diesen Code zu verwenden:

var value=2.346; 
var result = Math.Round(value, 2, MidpointRounding.AwayFromZero); 
var str=String.Format("{0:0.00}", result); 
+0

Es ist nicht notwendig, den Wert zu runden. Außerdem müssen Sie string.Format() nicht verwenden. Stattdessen können Sie 'var value = 2.346; var str = value.ToString ("0.00"); 'Unabhängig davon, ob Sie double.ToString() oder string.Format() verwenden, erhalten Sie eine Rundung des Mittelpunkts von Null weg. Also sollte ich den ersten Satz umformulieren: Sie sollten Math.Round() nur verwenden, wenn Sie MidpointRounding.ToEven benötigen. – phoog

8
double someValue = 2.346;  
string displayString = someValue.ToString("0.00"); 

Beachten Sie, dass double.ToString (und damit string.Format()) verwendet Mittelpunkt Rundung von Null weg, so wird 0,125 0.13. Dies ist normalerweise das gewünschte Verhalten für die Anzeige. Diese Saiten sollten natürlich nicht zum Runden verwendet werden.

Diese Methode ist auch ungeeignet für das Runden, das in mathematischen Berechnungen erforderlich ist (wobei MidpointRounding.ToEven normalerweise der beste Ansatz ist). In diesem Fall sollte Math.Round() verwendet werden.