十进制转换本地化(德语)

时间:2017-04-18 10:58:15

标签: asp.net-mvc

我在En-US语言环境中的小数值为14780,德语的预期输出为14.780。但尾随的零没有采取。

Decimal.Parse(string.Format(“{0:n0}”,14780),System.Globalization.CultureInfo.InvariantCulture)

观察到的输出:14.78

2 个答案:

答案 0 :(得分:0)

  1. System.Globalization.CultureInfo.InvariantCultureGermande-DE)不同。解析和转换为字符串时,通过在Parse/TryParseFormat方法中指定该文化,始终使用相同的文化。使用英语(不变量)和另一个德语会导致意外结果,因为小数和逗号在文化之间具有相反的含义。除非你知道这种文化是什么并且它无法改变,否则永远不要假设该文化提供文化。
  2. 除非您使用的是科学记数法,否则永远不会从小数的左侧删除尾随0,即使这样,它也会被保留但使用指数。也许你没有正确输入你的问题并指的是数字的右侧(小数部分)?
  3. 代码示例:

    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

.net Fiddle