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

Chr*_*ian 3 .net c# cultureinfo

TypeConverter班上有问题.它适用于CultureInvariant值,但不能转换特定的文化,如英语千位分隔符.下面是一个我无法开展工作的小型测试程序.

这是问题:) - ConvertFromString使用以下消息抛出异常"2,999.95不是Double的有效值." 并且内部异常"输入字符串格式不正确"..

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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Joã*_*elo 5

DoubleConverter是从获得TypeDescriptor.GetConverter(typeof(double))最终UPS调用Double.Parse带有下列参数:

Double.Parse(
    "2,999.95", 
    NumberStyles.Float, 
    (IFormatProvider)culture.GetFormat(typeof(NumberFormatInfo)));
Run Code Online (Sandbox Code Playgroud)

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

如果Double.Parse被调用也NumberStyles.AllowThousands不会发生问题.

Double.Parse(
    "2,999.95", 
    NumberStyles.Float | NumberStyles.AllowThousands, 
    (IFormatProvider)culture.GetFormat(typeof(NumberFormatInfo)));
Run Code Online (Sandbox Code Playgroud)