我有一个20,55
德语值。
当我将区域设置更改为 US 时,该值将显示为2055.0
运行此代码后:
double d = Double.Parse("20,55",CultureInfo.CurrentCUCulture);
这是为什么?
我有一个20,55
德语值。
当我将区域设置更改为 US 时,该值将显示为2055.0
运行此代码后:
double d = Double.Parse("20,55",CultureInfo.CurrentCUCulture);
这是为什么?
因为在美国,,
千位分隔符被忽略了?就像在德国(和欧洲大陆)一样,.
千位分隔符会被忽略吗?
在德国,您写: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);
在美国,小数点分隔符是.
,而不是,
。如果您尝试 parse 20,55
,它将(显然)忽略逗号作为标准的三元组分隔符(例如 in 1,234,567.89
),即使它们中没有三个数字。
如果要解析欧式数字,则需要使用欧式文化设置对其进行解析。
这是因为美国小数点分隔符是 the.
而不是,
.
如果您想避免该问题,无论用户的区域设置如何,您都可以编写一个扩展方法:
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());