Ошибка исключения формата c # Convert.ToDouble - PullRequest
7 голосов
/ 23 июля 2011

Я пытаюсь преобразовать эту строку в двойную

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 ]

26 голосов
/ 23 июля 2011

double.Parse будет использовать текущую культуру по умолчанию. Звучит так, будто вы хотите инвариантную культуру:

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

РЕДАКТИРОВАТЬ: Просто чтобы быть ясно, очевидно, вы не должны использовать это, если вы пытаетесь проанализировать текст, введенный пользователем в другой культуре. Это для использования, когда вы получили данные в инвариантной культуре (как большинство текстовых форматов данных между машинами) и хотите применить это при разборе.

3 голосов
/ 23 июля 2011

Вам не нужно заменять . на , .. однако лучше использовать метод .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 голосов
/ 23 июля 2011

Convert.ToDouble использует Double.Parse для внутреннего использования. Если вы не уверены в контексте культуры, вам следует использовать перегрузку Double.Parse для уточнения культуры:

double d = double.Parse("1.12", CultureInfo.InvariantCulture);
0 голосов
/ 12 августа 2014

Имейте в виду, эта проблема может зависеть от того, откуда взята строка ввода.Если он считывается из базы данных как объект, вы можете решить проблему, сохранив его как объект и используя 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);
    }
...