Um numerische Werte in C# als Zeichenketten zu formatieren, werden Standardformatbezeichner und die Methoden string.Format() oder object.ToString() genutzt. Für den Fall, dass die Standardformatbezeichner für die vorgesehenen Zwecke nicht ausreichen, können benutzerdefinierte Formatzeichenfolgen definiert werden, um das gewünschte Format zu ermöglichen. Dieser Beitrag beschäftigt sich mit drei typischen Formatierungsanforderungen:
- Begrenzung von Dezimalstellen
- Tausendertrennzeichen
- Exponential-Schreibweise
1. Begrenzung von Dezimalstellen
Um die Anzahl der Dezimalstellen einer Fließkommazahl zu begrenzen, kann der Standardformatbezeichner F genutzt werden. Dazu wird die gewünschte Anzahl der Nachkommastellen dem Bezeichner F als Suffix hinzugefügt. Das folgende Listing zeigt, wie die Anzeige eines Double-Werts auf zwei Nachkommastellen begrenzt werden kann.
double myDouble = 12.129;
Console.WriteLine(myDouble.ToString("F2"));
Die Ausgabe des myDouble-Werts lautet 12,13. Bei der Formatierung dieser Ausgabenzeichenfolge wird automatisch auf die zweite Nachkommastelle gerundet.
Die im Listing dargestellte Formatierungsanweisung F2 begrenzt die Ausgabe auf zwei Dezimalstellen. Falls die zu formatierende Zahl jedoch keine Nachkommastellen hat, wird die Anzahl der gewünschten Nachkommastellen mit Nullen aufgefüllt. D.h., dass z.B. die Zahl 1202 mit der Formatangabe F2 zu 1202,00 formatiert wird.
Falls dies nicht gewünscht ist, kann man eine benutzerdefinierte Formatzeichenfolge folgendermaßen definieren: 0.##. Diese Formatzeichenfolge bewirkt, dass maximal zwei Nachkommastellen dargestellt werden. Die Angabe des Rautenzeichens bedeutet hier eine optionale Darstellung der Nachkommastellen. Das folgende Listing zeigt den Einsatz der benutzerdefinierten Formatzeichenfolge:
double myDouble1 = 12.129;
Console.WriteLine(myDouble1.ToString("0.##"));
double myDouble2 = 1202;
Console.WriteLine(myDouble2.ToString("0.##"));
Die Ausgabe des myDouble1-Werts lautet 12,13, während die zweite Ausgabe 1202 lautet.
2. Tausendertrennzeichen
Ein weiterer häufiger Formatierungswunsch ist die Anzeige von Tausendertrennzeichen (ein Punkt nach jeder dritten Stelle vor dem Komma). Diese Formatierung kann in C# recht komfortabel durch den Standardformatbezeichner N erreicht werden. Dabei kann analog zum Formatbezeichner F die Anzahl der darzustellenden Nachkommazahlen als Suffix angegeben werden.
Das folgende Listing zeigt einen möglichen Einsatz des Formatbezeichners N:
double myDouble1 = 123456;
Console.WriteLine(myDouble1.ToString("N2"));
double myDouble2 = 123456.457;
Console.WriteLine(myDouble2.ToString("N2"));
Die Ausgabe im ersten Fall lautet 123.456,00. Im zweiten Fall lautet die Ausgabe 123.456,46.
3. Exponential-Schreibweise
Um eine Zahl in Exponential-Schreibweise darzustellen (etwa weil die Zahl sehr groß bzw. sehr klein ist), kann man den Standardformatbezeichner E verwenden. Das folgende Listing zeigt zwei Beispiele, die in Exponential-Schreibweise formatiert werden:
double myDouble1 = 0.00001234;
Console.WriteLine(myDouble1.ToString("E"));
double myDouble2 = 1234456.34;
Console.WriteLine(myDouble2.ToString("E"));
Die erste Ausgabe lautet 1,234000E-005, die zweite 1,234456E+006. Der Exponent besteht aus einem Plus- oder Minuszeichen und mindestens drei Ziffern. Ggf. wird der Exponent durch Nullen ergänzt, um diesem Mindestwert zu entsprechen.
Hinweis: Die Ausgabe der Ergebniszeichenfolge wird von den Ländereinstellungen der Systemsteuerung beeinflusst. Die hier dargestellten Beispiele sind gültig für eine deutsche Ländereinstellung.
Auf den MSDN-Seiten findet sich eine detaillierte Übersicht der Standardformatbezeichner.