преобразование 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);
}