- System.Globalization.CultureInfo.InvariantCulture ist nicht die gleiche als
German
(de-DE
). Beim Parsen und Konvertieren in eine Zeichenfolge wird immer dieselbe Kultur verwendet, indem diese Kultur in den Methoden Parse/TryParse
und Format
angegeben wird. Die Verwendung von Englisch (invariant) für eins und Deutsch für das andere führt zu unerwarteten Ergebnissen, da das Dezimal- und das Komma eine entgegengesetzte Bedeutung zwischen den Kulturen haben. Nimm niemals an, dass der Thread die Kultur liefert, wenn du nicht weißt, was diese Kultur ist und sie kann nicht geändert werden.
- Eine abschließende 0 würde nie von der linken Seite des Dezimaltrennzeichens fallen gelassen werden, außer Sie verwenden wissenschaftliche Notation, in welchem Fall sie auch dann erhalten bleibt, aber einen Exponenten benutzt. Vielleicht haben Sie Ihre Frage nicht richtig eingegeben und beziehen sich auf die rechte Seite (Bruchteil) der Zahl?
Codebeispiel:
var value = 14780M;
var strValue = string.Format(System.Globalization.CultureInfo.GetCultureInfo("de-DE"), "{0:n0}", value)
// strValue is equal to "14.780"
Hier ist der Code oben zeigt, dass es funktioniert, wenn die gleiche Kultur verwenden, aber Pausen, wenn Sie Kulturen mischen.
// OK - using InvariantCulture for both
var culture = System.Globalization.CultureInfo.InvariantCulture;
Console.WriteLine(Decimal.Parse(string.Format(culture, "{0:n0}", 14780), culture));
// OK - using de-DE for both
culture = System.Globalization.CultureInfo.GetCultureInfo("de-DE");
Console.WriteLine(Decimal.Parse(string.Format(culture, "{0:n0}", 14780), culture));
// FAIL - mixing de-DE and InvariantCulture
culture = System.Globalization.CultureInfo.GetCultureInfo("de-DE");
Console.WriteLine(Decimal.Parse(string.Format(culture, "{0:n0}", 14780), System.Globalization.CultureInfo.InvariantCulture));
Siehe Fiddle