Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用于本地语言支持的Double.Parse_C#_Parsing_Regional Settings - Fatal编程技术网

C# 用于本地语言支持的Double.Parse

C# 用于本地语言支持的Double.Parse,c#,parsing,regional-settings,C#,Parsing,Regional Settings,我有一个德语值20,55。 当我将区域设置更改为US时,运行此代码后,值显示为2055.0: double d = Double.Parse("20,55",CultureInfo.CurrentCUCulture); 为什么会这样?在美国,十进制分隔符是,而不是,。如果您试图解析20,55,它将(显然)忽略逗号作为标准三元组分隔符(例如1234567.89),即使它们中没有三位数字 如果要解析欧式编号,需要使用欧式区域性设置进行解析。因为在美国,,是千位分隔符,可以忽略吗?就像在德国(和欧洲

我有一个德语值
20,55

当我将区域设置更改为US时,运行此代码后,值显示为
2055.0

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

为什么会这样?

在美国,十进制分隔符是
,而不是
。如果您试图解析
20,55
,它将(显然)忽略逗号作为标准三元组分隔符(例如
1234567.89
),即使它们中没有三位数字


如果要解析欧式编号,需要使用欧式区域性设置进行解析。

因为在美国,
是千位分隔符,可以忽略吗?就像在德国(和欧洲大陆)一样,
是千位分隔符,它被忽略了

在德国你写:1.000,55。在美国,你写的是:1000.55(有些思想流派删除了
,如果前面有一个位数,那么就删除1000.55和11000.55)

现在,如果您想确保您的程序使用的是
de
区域性,请将其作为参数传递到所有位置

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

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

这是因为美国十进制分隔符是
,而不是

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

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());