2010-03-30 12 views
24

Mit String.Format wie kann ich sicherstellen, dass alle Zahlen haben Komma nach jeweils 3 Ziffern zB 23000 = "23.000" und dass 0 "0" zurückgibt.hinzufügen Kommas mit String.Format für die Nummer und

String.Format ("{0: n}", 0); // gibt 0.00 was ich nicht will. Ich möchte keine Dezimalstellen, alle Zahlen sind ganze Zahlen.

+0

Sie sollten keine Kommas verwenden, um Ziffern zu trennen, Sie sollten (weiche) Leerzeichen verwenden. Grund ist, dass in einem signifikanten Teil der Welt (http://en.wikipedia.org/wiki/File:DecimalSeparator.png) das Komma das Dezimaltrennzeichen (Basispunkt) ist, und so ist die Bedeutung des Kommas subjektiv, kontextabhängig - siehe Wikipedia http://en.wikipedia.org/wiki/Decimal_separator#Digit_grouping. – ANeves

+1

Sie sollten Kommas nicht hartcodieren, sondern das Gebietsschema oder Internationalisierungs-Tausendertrennzeichen verwenden. Verwenden Sie ein Komma als Standard, wenn Sie möchten, wenn kein Gebietsschema festgelegt ist. – mpez0

Antwort

51

Sie dies tun können, was ich ein bisschen sauberer finden die Absicht zu lesen:

String.Format("{0:#,###0}", 0); 

Beispiel:

string.Format("{0:#,###0}", 123456789); // 123,456,789 
string.Format("{0:#,###0}", 0); // 0 
+0

das gibt " – raklos

+2

@raklos zurück - Verpasste eine 0 in der Eingabe, gerade aktualisiert. –

+1

Bingo, funktioniert jetzt;) – raklos

26

Wenn Ihre aktuelle Kultur seting verwendet Kommas als Tausendertrennzeichen, können Sie formatieren sie es einfach als Zahl mit null Dezimalstellen:

String.Format("{0:N0}", 0) 

Oder:

0.ToString("N0") 
+7

+1 für die Erwähnung Kultur –

2

Sie auch um ein wenig mit dem Cultureinfo-Objekt spielen kann, wenn keine der anderen Lösungen für Sie gut funktionieren:

 var x = CultureInfo.CurrentCulture; 
     x.NumberFormat.NumberDecimalSeparator = ","; 
     x.NumberFormat.NumberDecimalDigits = 0; 
     x.NumberFormat.NumberGroupSizes = new int[] {3}; 
1

Sie eine Nummer nach der N Anzahl der Nachkommastellen angeben setzen können :

String.Format("{0:n0}", 0) // gives 0 
3

von msdn

double value = 1234567890; 
Console.WriteLine(value.ToString("#,#", CultureInfo.InvariantCulture)); 

Anzeigen 1,234,567,890

+0

Vorsicht vor diesem: es wird eine leere Zeichenfolge für Wert = 0 generieren, die sicherlich ist was OP will. Verwenden Sie stattdessen "#, 0" als Muster und es wird in Ordnung sein. – AFract

0

Ich markierte eine andere Antwort und fand dann, dass Nullwerte eine leere Zeichenfolge sind.

 System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo("de-DE"); 
     System.Threading.Thread.CurrentThread.CurrentCulture = ci; 

     double x = 23232323.21; 
     string y = x.ToString("#,0", System.Globalization.CultureInfo.CurrentCulture); 

Der String wird in der aktuellen Kultur zurückgeführt, also y = 23.232.323 Deutsch ist

y = 0, wenn x = 0

0

Sie es einfach so:

Console.WriteLine(**$**"Your current amount of money is: **{yourVar:c}**"); 
Verwandte Themen