Tausender-Trenner mit C#

Möchte man Zahlen mit Tausender-Trenner ausgeben, kann es bei mehrsprachigen Systemen zu unschönen Effekten kommen. Sind die Daten zum Beispiel im “deutschen” Format, das System aber englisch eingestellt, kann hier eine Fehl-Interpretation entstehen, und der Double-Wert 110,045 wird auf einmal als 110045 angezeigt oder verarbeitet. (das Komma wird dann einfach als Trenner interpretiert und macht daraus ein paar Tausend, statt ein paar Hundert).

Die Formatierung

Um eine Zahl mit einem Tausender-Trenner als String zu formatieren, gibt es eine ganz einfache Herangehensweise:

string.Format(new System.Globalization.CultureInfo("de-DE"), "{0:0,0}", 10000000)
// output: 10.000.000

Hier wird, unabhängig von der System-Sprache der deutsche Tausender-Trenner (also der Punkt) genutzt. Natürlich kann man hier jede gewünschte CultureInfo einsetzen, um andere Trenn-Zeichen zu erhalten. (Infos zur Nutzung und Erzeugung der CultureInfo findest du hier).

Formatierung mit Binding in XAML

Das ganze kann natürlich auch komfortabel mittels Binding genutzt werden. Habe ich anfangs noch mühsam Brücken mit String-Properties für das Binding genutzt, formatiere ich meine Daten nun ganz einfach zur ohne “Bloat-Code”.

<Label 
  Text="{Binding MyCounterValue, StringFormat='{0:#,0}'}"
  FontSize="22" 
  FontAttributes="Bold" />

Hinweis: Sollte Visual Studio hier eine ganze Reihe an Fehlern anzeigen, ist dies nicht so schlimm. Die Awendung lässt sich dennoch kompilieren und starten, und sobald ihr den XAML-Code wieder schließt, verschwinden auch die Fehler. Leider habe ich noch nicht herausgefunden, wie das ganze ohne Fehler-Markierung implementiert wird, beziehungsweise was die Quelle der Fehler ist.

Wer sich mehr über die Formatierungs-Möglichkeiten in C-Sharp belesen möchte, findet in der offiziellen Microsoft Dokumentation eine Menge Informationen.