在荷兰的double.TryParse

运行荷兰语(比利时)的Web服务器

double output; double.TryParse(txtTextbox1.Text, out output); 

这是在荷兰环境中将文本转换为双倍的好方法吗? 假设输入为“ 24.45 ”而不是“ 24,45

如果您想使用荷兰语(比利时)数字格式:

 double output; double.TryParse("24,45", NumberStyles.Any, CultureInfo.GetCultureInfo("nl-BE"), out output); 

或者使用美国数字格式:

 double output; double.TryParse("24.45", NumberStyles.Any, CultureInfo.GetCultureInfo("en-US"), out output); 

如果你试图用荷兰文化集解析“24.45”,你会得到“2445”,同样地,如果你试图用美国文化解析“24,45”,你将得到“2445”。 如果您希望在使用错误的小数点时解析失败,请更改NumberStyles.Any以排除标志: NumberStyles.AllowThousands

 double output; if (double.TryParse("24.45", NumberStyles.Any ^ NumberStyles.AllowThousands, CultureInfo.GetCultureInfo("nl-BE"), out output)) 

如果您的整个应用程序都是荷兰语,那么您应该全局更改您的cultureinfo – 以下是如何在WinForms中执行此操作,以及如何在ASP.NET中执行此操作 。

一旦您使用全局设置的CultureInfo,您可以将以上代码更改为:

 double output; double.TryParse("24.45", NumberStyles.Any, CultureInfo.CurrentCulture, out output); 

荷兰比利时的正确文化代码是“nl-BE”,所以你应该使用它而不是经常建议的“nl-NL”,这将为你提供适合荷兰的荷兰文化设置的变体。

 double output; double.TryParse("24.45", NumberStyles.Any, CultureInfo.GetCultureInfo("nl-BE"), out output); 

您可以在http://arvindlounge.spaces.live.com/blog/cns!C9061D5B358A2804!263.entry找到完整的文化代码列表。

您应该将文化设置为荷兰语。 文化决定了如何解析表示数字的字符串。

查看本文: 如何:在ASP.NET应用程序中以编程方式设置当前文化 ,它解释了如何为ASP.NET应用程序和当前线程设置文化。

如果您的服务器的区域设置设置为荷兰数字,请尝试以下操作:

 double output; double.TryParse(txtTextbox1.Text, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.CurrentCulture, out output); 

您可以使用允许您指定语言环境的重载(具有瑞典语语言环境的示例,因为我知道该语言环境是如何工作的):

 double result; if (double.TryParse("24,95", NumberStyles.AllowDecimalPoint, CultureInfo.GetCultureInfo("sv-SE"), out result)) { Console.WriteLine(result.ToString()); } 

如果我在上面的TryParse调用中传递“24.95”,它将返回false,因为瑞典十进制符号是“,”。

您可能希望尝试使用NumberStyles参数来获取所需的确切行为。 例如,如果我将更改为NumberStyles.Any并使用上面的输入24.95调用该方法,TryParse将返回true,结果将为2495,这可能不是您想要的。

我的版本适用于两个分隔符'.'','

 public static double? GetDoubleFromString(string strNum) { double num = 0; strNum = strNum.Replace(',', '.'); if (double.TryParse(strNum, NumberStyles.Any, CultureInfo.GetCultureInfo("en-US"), out num)) return num; return null; }