преобразование c#.Ошибка исключения формата ToDouble

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

Convert.ToDouble("1.12");

и это выход

4 ответов


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

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

EDIT: просто для ясности, очевидно, вы не должны использовать это, если вы пытаетесь разобрать текст, введенный пользователем в другой культуре. Это для использования, когда вы получили на инвариантная культура (как и большинство текстовых форматов данных "машина-машина") и хочет обеспечить это при синтаксическом анализе.


вам не нужно заменять . to ,.. однако лучший способ-использовать .net TryParse методика:

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

Edit: также обратите внимание, что путем замены . by , вы получаете неправильные результаты, например 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

преобразовать.ToDouble использует двойной.Проанализируйте внутренне. Если вы не уверены в контексте культуры, вы должны использовать перегрузку вдвое.Разбор, уточняющий культуру:

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