我有一个值为20,55
这是德语。Double.Parse本地语言支持
double d = Double.Parse("20,55",CultureInfo.CurrentCUCulture);
这是为什么:
当我改变区域设置以美国的价值被运行此代码后,显示为2055.0
?
我有一个值为20,55
这是德语。Double.Parse本地语言支持
double d = Double.Parse("20,55",CultureInfo.CurrentCUCulture);
这是为什么:
当我改变区域设置以美国的价值被运行此代码后,显示为2055.0
?
在美国,小数点分隔符是.
,而不是,
。如果试图解析20,55
,它将(显然)忽略逗号作为标准的三元组分隔符(如在1,234,567.89
中),即使它们中没有三位数字。
如果你想解析一个欧式风格的数字,你需要用欧式风格的文化设置来解析它。
因为在美国,
是千位分隔符,它被忽略了吗?与德国(和欧洲大陆)相同,.
是千位分隔符,它被忽略了吗?
在德国你写: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);
这是因为美国的小数点分隔符是.
,而不是,
。
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 ;
}
而且调用此方法:
如果你想避免这样的问题,无论用户的区域设置,你可以写一个扩展方法