Double.Parse支持本地语言

时间:2011-10-24 08:23:49

标签: c# parsing regional-settings

我的值为20,55,使用的是德语 当我将区域设置更改为US时,运行此代码后,该值显示为2055.0

double d = Double.Parse("20,55",CultureInfo.CurrentCUCulture);

为什么?

3 个答案:

答案 0 :(得分:4)

因为在美国,,是千位分隔符并被忽略了?与德国(和欧洲大陆)的情况一样,.是千分隔符,它被忽略了吗?

在德国,你写道:1.000,55。在美国你写道:1,000.55(如果以前有一个数字,有一些思想学会删除,。所以1000.55和11,000.55)。

现在,如果您想确保您的程序使用de-DE文化,请在任何地方传递参数

CurrentCulture culture = new CultureInfo("de-DE");

double d = double.Parse("20,55", culture);

答案 1 :(得分:3)

在美国,小数点分隔符为.,而不是,。如果您尝试解析20,55,它(显然)会将逗号忽略为标准三元组分隔符(例如在1,234,567.89中),即使所有逗号都没有三位数。

如果要解析欧式风格的数字,则需要使用欧式文化设置进行解析。

答案 2 :(得分:1)

这是因为美国小数点分隔符是.而不是,

如果您想避免该问题,无论用户的区域设置如何,您都可以编写扩展方法:

public static String ToRegionalNumber(this String str) {
    String regionalNb = str.Replace(",", NumberFormatInfo.CurrentInfo.NumberDecimalSeparator);
    regionalNb = regionalNb .Replace(".", NumberFormatInfo.CurrentInfo.NumberDecimalSeparator);
    return regionalNb ;
}

使用您的号码时调用此方法:

double d = Double.Parse("20,55".ToRegionalNumber());