如何使用TypeConverter转换特定于文化的double?

我有TypeConverter类的问题。 它与CultureInvariant值一起正常工作,但无法转换特定文化,如英语千位分隔符。 下面是一个我无法开展工作的小型测试程序。

这是问题:) – ConvertFromString抛出exception,并显示以下消息“2,999.95不是Double的有效值”。 并且内部exception“输入字符串的格式不正确”。

 using System; using System.Globalization; using System.ComponentModel; class Program { static void Main() { try { var culture = new CultureInfo("en"); var typeConverter = TypeDescriptor.GetConverter(typeof(double)); double value = (double)typeConverter.ConvertFromString( null, culture, "2,999.95"); Console.WriteLine("Value: " + value); } catch (Exception e) { Console.WriteLine("Error: " + e.Message); } } } 

编辑:链接到Connect上的错误报告

TypeDescriptor.GetConverter(typeof(double))获得的DoubleConverter最终使用以下参数调用Double.Parse

 Double.Parse( "2,999.95", NumberStyles.Float, (IFormatProvider)culture.GetFormat(typeof(NumberFormatInfo))); 

问题是NumberStyles.Float不允许数千个分隔符,这就是你遇到问题的原因。 您可以在Microsoft Connect上提交此信息,或查看是否有其他人遇到同样的问题。

如果使用NumberStyles.AllowThousands也调用Double.Parse则不会发生此问题。

 Double.Parse( "2,999.95", NumberStyles.Float | NumberStyles.AllowThousands, (IFormatProvider)culture.GetFormat(typeof(NumberFormatInfo)));