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

时间:2010-04-22 07:29:31

标签: c# .net 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);
        }
    }
}

编辑: 链接到Connect

上的错误报告

1 个答案:

答案 0 :(得分:5)

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

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

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

如果同时使用Double.Parse调用NumberStyles.AllowThousands,则不会出现问题。

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