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

exp*_*ses 1 .net c#

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

Decimal.Parse("1,234.56", CultureInfo.GetCultureInfo("en-US"));
Run Code Online (Sandbox Code Playgroud)

但这会引发System.FormatException?

Decimal.Parse("1.234,56", CultureInfo.GetCultureInfo("fr-FR"));
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

Jon*_*eet 7

法国CultureInfoNumberFormatInfo使用空间作为NumberGroupSeparator- 所以这有用,例如:

Decimal.Parse("1 234,56", CultureInfo.GetCultureInfo("fr-FR"));
Run Code Online (Sandbox Code Playgroud)

如果你想.用作千位分隔符,那么你需要一种文化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);
    }
}
Run Code Online (Sandbox Code Playgroud)

或修改另一种文化:

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