使用句点为千位分隔符时,.NET Decimal.Parse会抛出FormatException

时间:2016-09-15 09:20:07

标签: c# .net

在.NET中,任何人都可以告诉我为什么会这样:

Decimal.Parse("1,234.56", CultureInfo.GetCultureInfo("en-US"));

但这会引发System.FormatException?

Decimal.Parse("1.234,56", CultureInfo.GetCultureInfo("fr-FR"));

是否有建议的方法来解析欧洲数字,这些数字可能包含一个句点作为千位分隔符而一个逗号作为小数点?

谢谢!

2 个答案:

答案 0 :(得分:7)

法国CultureInfo NumberFormatInfo使用空格作为NumberGroupSeparator - 所以这有用,例如:

Decimal.Parse("1 234,56", CultureInfo.GetCultureInfo("fr-FR"));

如果您想将.用作千位分隔符,那么您需要一种文化,即NumberGroupSeparator。例如,您可以使用西班牙语:

using System;
using System.Globalization;

class Test
{
    static void Main()        
    {
        var culture = (CultureInfo) CultureInfo.GetCultureInfo("es-ES");
        var d = Decimal.Parse("1.234,56", culture);
        Console.WriteLine(d);
    }
}

或修改另一种文化:

using System;
using System.Globalization;

class Test
{
    static void Main()        
    {
        // Call clone to make sure it's mutable
        var culture = (CultureInfo) CultureInfo.GetCultureInfo("fr-FR").Clone();
        culture.NumberFormat.NumberGroupSeparator = ".";
        var d = Decimal.Parse("1.234,56", culture);
        Console.WriteLine(d);
    }
}

答案 1 :(得分:1)

MSDN开始,(" fr-FR")的正确格式应为:

Decimal.Parse("1 234,56", CultureInfo.GetCultureInfo("fr-FR"));

将产生与上面相同的输出(" en-US")

  

1234.56

请查看此示例here