Входная строка была не в правильном формате # 2 - PullRequest
13 голосов
/ 11 марта 2011
double temp;
temp = (double)Convert.ToDouble("1234.5678");

Привет, ребята, я не могу понять, почему вышеприведенная строка не работает.В приведенной выше строке выдается ошибка времени выполнения:

Произошло необработанное исключение типа System.FormatException в mscorlib.dll

Дополнительная информация: входная строка была в неправильном формате.

Ответы [ 10 ]

23 голосов
/ 11 марта 2011

Насколько я знаю, методы Convert используют текущую локаль для таких преобразований.В этом случае я предполагаю, что ваша текущая локаль будет ожидать запятую в качестве десятичной точки.Попробуйте установить текущую локаль для вашего приложения или конверсию в какой-либо язык / страну, в которой используются точки (например, en_US).Метод должен предоставлять второй необязательный параметр для предоставления IFormatProvider в качестве альтернативного решения.

21 голосов
/ 24 декабря 2012

Чтобы преобразовать строку в двойную без исключения:

Необработанное исключение типа System.FormatException произошло в mscorlib.dll

Дополнительная информация: входная строка была в неправильном формате.

делает его нечувствительным к культуре, предоставляя значение второго параметра CultureInfo.InvariantCulture , например:

double.Parse("1234.5678", CultureInfo.InvariantCulture) 
10 голосов
/ 15 декабря 2014

первое решение (как упоминалось в других постах):

double temp = double.Parse("1234.5678", CultureInfo.InvariantCulture);

второе решение - сделать его по умолчанию для текущего потока:

Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
double temp = double.Parse("1234.5678");

третье решение - установить по умолчанию блок кода:

var prevCurrentCulture = Thread.CurrentThread.CurrentCulture;
Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
...
double temp = double.Parse("1234.5678");
...
Thread.CurrentThread.CurrentCulture = prevCurrentCulture;
5 голосов
/ 11 марта 2011

Возможно, вы используете европейский местный житель. В некоторых странах. и в цифрах перевернут.

4 голосов
/ 11 марта 2011

Привет, как говорит Марио, вы должны проанализировать его с учетом региональных настроек.

double temp = double.Parse("1234.5678", System.Globalization.CultureInfo.CurrentCulture);

Привет.

2 голосов
/ 11 марта 2011

Проверьте ваши региональные настройки. Ваш десятичный символ должен быть ".".

0 голосов
/ 22 ноября 2018

Я обнаружил проблему, когда вы оставляете текстовое поле пустым, тогда возникает эта ошибка, поэтому попробуйте это исправить.

Произошло необработанное исключение типа System.FormatException в mscorlib.dll Дополнительная информация: Входная строка была в неправильном формате.

if (!string.IsNullOrEmpty(Txt1.Text)) {int _qty = (int)Convert.ToInt32(Txt1.Text);}
0 голосов
/ 11 марта 2011

Я рекомендую вместо этого использовать TryParse, поэтому вам не нужно обрабатывать исключения при разборе.

double temp = 0;
if (double.TryParse("123.456", out temp)
{
    Console.WriteLine(string.Format("Parsed temp: {0}", temp);
}
else
{
    Console.WriteLine("Input value was not able to be parsed.");
}
0 голосов
/ 11 марта 2011

Я не вижу проблем с приведенным выше кодом. Он отлично работает и печатает значение 1234.5678.Я попробовал это в VS2008.Возможно, это связано с настройками локали на вашем компьютере.

0 голосов
/ 11 марта 2011
double temp = double.Parse("1234,5678");
...