我在En-US语言环境中的小数值为14780,德语的预期输出为14.780。但尾随的零没有采取。
Decimal.Parse(string.Format(“{0:n0}”,14780),System.Globalization.CultureInfo.InvariantCulture)
观察到的输出:14.78
答案 0 :(得分:0)
German
(de-DE
)不同。解析和转换为字符串时,通过在Parse/TryParse
和Format
方法中指定该文化,始终使用相同的文化。使用英语(不变量)和另一个德语会导致意外结果,因为小数和逗号在文化之间具有相反的含义。除非你知道这种文化是什么并且它无法改变,否则永远不要假设该文化提供文化。代码示例:
var value = 14780M;
var strValue = string.Format(System.Globalization.CultureInfo.GetCultureInfo("de-DE"), "{0:n0}", value)
// strValue is equal to "14.780"
以上是您的代码,显示它在使用相同的文化时有效,但在混合文化时会中断。
// 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));
请参阅Fiddle
答案 1 :(得分:0)
decimal
类型不存储数千个分隔符。但是,在将小数转换回字符串时,您可以再次重新构建它们。
decimal deci = Decimal.Parse(string.Format("{0:n0}", 14780), System.Globalization.CultureInfo.InvariantCulture); // 14780
string str = string.Format("{0:n0}", deci); // 14.780
.NET String.Format() to add commas in thousands place for a number