2011-10-24 98 views
1

我有一个值为20,55这是德语。Double.Parse本地语言支持

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

这是为什么:
当我改变区域设置以美国的价值被运行此代码后,显示为2055.0

回答

2

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

如果你想解析一个欧式风格的数字,你需要用欧式风格的文化设置来解析它。

3

因为在美国,是千位分隔符,它被忽略了吗?与德国(和欧洲大陆)相同,.是千位分隔符,它被忽略了吗?

在德国你写:1.000,55。在美国,你写的是:1,000.55(还有一些学校认为如果之前有一个数字,就删除,,所以1000.55和11000.55)。

现在,如果你想确保你的程序正在使用de-DE文化,作为参数传递到处

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

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

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

double d = Double.Parse("20,55".ToRegionalNumber()); 
:您的电话号码工作时

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

而且调用此方法:

如果你想避免这样的问题,无论用户的区域设置,你可以写一个扩展方法