c#Convert.ToDouble格式exception错误

我正在尝试将此字符串转换为double

Convert.ToDouble("1.12");

这是输出

System.FormatException未处理。

我应该这样做吗?

  public static double ConvertToDouble(string ParseVersion) { double NewestVersion; try { NewestVersion = Convert.ToDouble(ParseVersion); } catch { ParseVersion = ParseVersion.Replace('.', ','); NewestVersion = Convert.ToDouble(ParseVersion); } return NewestVersion; } ConvertToDouble("1.12"); 

或者是否有更简单的解决方案?

double.Parse默认使用当前文化。 听起来你想要不变的文化:

 double d = double.Parse("1.12", CultureInfo.InvariantCulture); 

编辑:为了清楚,显然如果你试图解析用户在不同文化中输入的文本,你不应该使用它。 当您不变文化中接收数据 (这是大多数基于机器到机器的数据文本格式)并且希望在解析时强制执行此操作时,可以使用此选项。

你不必更换. to , ..但更好的方法是使用.net TryParse方法,如:

 double d; if (double.TryParse("your string data", out d) { Console.WriteLine(d); } 

编辑:还要注意通过替换. 通过,你得到一个错误的结果,例如1.12

 double d = double.Parse(1.12);//d will equals to 1.12 double d = double.Parse(1,12);//d will equals to 112.0 

Convert.ToDouble内部使用Double.Parse。 如果您不确定文化背景,您应该使用Double.Parse的重载来精确化文化:

 double d = double.Parse("1.12", CultureInfo.InvariantCulture); 

请记住,此问题可能取决于输入字符串的来源。 如果从数据库中读取它作为对象,您可以通过将其保留为对象并使用Convert.ToDouble()来解决您的问题,如下所示:

 public double Double_fromObject(object obj) { double dNum = 0.0; if (obj.ToString() != string.Empty) // the Convert fails when "" { try { dNum = Convert.ToDouble(obj); } catch (SystemException sex) { // this class's error string LastError = sex.Message; } } return (dNum); }