c#Convert.ToDouble格式异常错误

时间:2011-07-23 12:41:07

标签: c# double formatexception

我正在尝试将此字符串转换为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");

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

4 个答案:

答案 0 :(得分:26)

默认情况下,

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

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

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

答案 1 :(得分:3)

您不必将.替换为, ..但更好的方法是使用.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

答案 2 :(得分:2)

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

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

答案 3 :(得分:0)

请记住,此问题可能取决于输入字符串的来源。如果从数据库中读取它作为对象,您可以通过将其保存为对象并使用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);
    }