繁体   English   中英

使用句点作为千位分隔符时,.NET Decimal.Parse引发FormatException

[英].NET Decimal.Parse throws a FormatException when using period as thousand separator

在.NET中,谁能告诉我这为什么起作用:

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

但这会引发System.FormatException吗?

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

是否存在一种建议的解析欧洲数字的方法,其中可能包含句点作为千位分隔符和逗号作为小数点?

谢谢!

法语CultureInfoNumberFormatInfo使用空格作为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);
    }
}

MSDN中(“ fr-FR”)的正确格式应为:

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

它将产生与上述相同的输出(“ en-US”)

1234.56

在此处检查此示例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM