2013-08-24 3 views
28

Ich habe versucht, die Antwort zu machen, die auf zwei Dezimalstellen gedruckt wird. Die gesamte Mathematik muss bei diesem Format von zwei Dezimalstellen bleiben. Ich habe ein paar Dinge ausprobiert und bin mir nicht sicher, was ich ändern soll, damit das funktioniert.Formatieren von einem Doppel auf zwei Dezimalstellen

double pdt1 = 239.99; 
double pdt1Total; 
double pdt2 = 129.75; 
double pdt2Total; 
double pdt3 = 99.95; 
double pdt3Total; 
double pdt4 = 350.89; 
double pdt4Total; 
double wage = 200; 
double percentage = 9; 
double total; 
double answer; 
double i = 100; 
double a; 
double b; 
double c; 
double d; 


Console.Write("Enter number sold of product #1: "); 
a = Convert.ToInt32(Console.ReadLine()); 

Console.Write("Enter number sold of product #2: "); 
b = Convert.ToInt32(Console.ReadLine()); 

Console.Write("Enter number sold of product #3: "); 
c = Convert.ToInt32(Console.ReadLine()); 

Console.Write("Enter number sold of product #4: "); 
d = Convert.ToInt32(Console.ReadLine()); 



pdt1Total = a * pdt1; 
pdt2Total = b * pdt2; 
pdt3Total = c * pdt3; 
pdt4Total = d * pdt4; 

total = (pdt1Total + pdt2Total + pdt3Total + pdt4Total); 



string.Format("{0:0.00}", total); 
string.Format("{0:0.00}", answer = (total * percentage/i) + wage); 


Console.WriteLine("Earnings this week: "+answer+""); 
+2

Was nicht funktioniert? – Stobor

+2

Sie möchten wahrscheinlich nicht Gleitkomma für Währung verwenden - die Rundungsfehler beißen Sie schließlich. Es scheint nichts eingebaut zu sein, aber Links wie http://www.codeproject.com/Articles/28244/A-Money-type-for-the-CLR zur Inspiration. Mit dem gesagt, wenn Sie Dinge wie Prozentberechnungen zu tun beginnen, können Sie nicht wirklich vermeiden, ein paar mehr Dezimalstellen hinzuzufügen ... – canton7

+0

Ich brauche die Doppel, um immer auf zwei Dezimalstellen zu bleiben, aber die Antwort wird dies nicht widerspiegeln. also ein Format von: 209.00 (wenn Sie ein Produkt für Produkt drei und Null für alle anderen gewählt haben, sollte dies die Antwort sein.) –

Antwort

50

string.Format nicht den ursprünglichen Wert ändern, aber es wird eine formatierte Zeichenfolge zurück. Zum Beispiel:

Console.WriteLine("Earnings this week: {0:0.00}", answer); 

Hinweis: Console.WriteLine ermöglicht Inline-String-Formatierung. Die oben ist äquivalent zu:

Runden
double c; 
c = Math.Round(c, 2); 

Aber Vorsicht werden Sie schließlich beißen, so verwenden Sie es mit Vorsicht:

Console.WriteLine("Earnings this week: " + string.Format("{0:0.00}", answer)); 
8

Sie eine double auf zwei Dezimalstellen wie in dieser Runde können.

Verwenden Sie stattdessen den decimal Datentyp.

+2

Ich habe Math.Round versucht und zu schnell wurden die Ergebnisse ungenau. –

+0

Warum ist der Unterschied zwischen Doppel und Dezimal beim Runden? – batmaci

45

Nun, je nach Ihren Bedürfnissen können Sie eines der folgenden wählen. Out Put gegen jede Methode geschrieben

können Sie die, die Sie

müssen wählen

Diese

decimal d = 2.5789m; 
Console.WriteLine(d.ToString("#.##")); // 2.58 

Runde wird Dadurch wird sichergestellt, dass zwei Dezimalstellen geschrieben werden.

d = 2.5m; 
Console.WriteLine(d.ToString("F")); //2.50 

wenn Sie Kommas schreiben möchten, können Sie verwenden, um dies

d=23545789.5432m; 
Console.WriteLine(d.ToString("n2")); //23,545,789.54 

, wenn Sie die abgerundeten von Dezimalwert zurückkehren möchten, können Sie dies tun

d = 2.578m; 
d = decimal.Round(d, 2, MidpointRounding.AwayFromZero); //2.58 
2

Da Sie arbeiten in Währung, warum nicht einfach dies tun:

Console.Writeline("Earnings this week: {0:c}", answer); 

Dies wird Antwort als Währung formatiert werden, so auf meinem Rechner (UK) wird es kommen wie:

Das Ergebnis dieser Woche: £ 209.00

3

Ich würde recomment die Fixed-Point ("F") Formatspezifizierer (wie von Ehsan erwähnt). Siehe die Standard Numeric Format Strings.

Mit dieser Option können Sie sogar eine konfigurierbare Anzahl von Dezimalstellen:

public string ValueAsString(double value, int decimalPlaces) 
{ 
    return value.ToString($"F{decimalPlaces}"); 
}