2017-04-18 37 views
0

在En-US语言环境中,我有一个小数值14780,德文的预期输出是14.780。但是尾随零并没有取得。十进制转换本地化(德语)

Decimal.Parse(的String.Format( “{0:N0}”,14780),System.Globalization.CultureInfo.InvariantCulture)

观察输出:14.78

回答

0
  1. System.Globalization.CultureInfo.InvariantCulture是不一样的如Germande-DE)。解析并转换为字符串时,通常通过在Parse/TryParseFormat方法中指定区域性使用相同的区域性。对一个人使用英语(不变)而对另一个使用德语会导致意想不到的结果,因为小数和逗号在文化之间具有相反的含义。永远不要假设该线程提供的文化,除非你知道该文化是什么,它不能改变。
  2. 除非您使用科学记数法,否则即使保留但使用指数,尾数0也不会从小数点左边开始丢弃。也许你没有正确输入你的问题,并指的是数字的右侧(小数部分)?

代码示例:

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