如何使用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)));