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.