{Входная строка имеет неправильный формат.}

По сути, я пытаюсь умножить цену на количество, но это не работает. Я получаю эту ошибку:

{"Входная строка имела неправильный формат."}

Помощь приветствуется, заранее спасибо.

Данные хранились в файлах cookie, которые я хочу управлять и размножать i.

new DataColumn("quantity"), new DataColumn("Price") //and its basically stored in a cookie
int tot;
tot = tot + (Convert.ToInt32(a[4].ToString()) * Convert.ToInt32(a[5].ToString()));

Ниже приведен скриншот результатов отладки введите здесь описание изображения


person khans    schedule 16.03.2017    source источник
comment
Каково значение a[4] и a[5]?   -  person BvdVen    schedule 16.03.2017
comment
Каковы значения a[4] и a[5]. Дайте угадаю, ничего, что можно преобразовать в int;)   -  person Mighty Badaboom    schedule 16.03.2017
comment
поставьте точку отладчика и проверьте значение [4] и [5], которое вызывает проблему во время выполнения   -  person Kevin Shah    schedule 16.03.2017
comment
если вы извлекаете данные из внешнего источника, я бы рекомендовал вместо этого использовать метод Int32.TryParse. Он возвращает логическое значение, указывающее, было ли преобразование успешным или неудачным. сделать это до любого расчета. Кроме того, в вашем случае добавление к «tot» избыточно, его ноль. всегда.   -  person Stavm    schedule 16.03.2017
comment
Этот вопрос уже сотни раз встречается на сайте, и ответ всегда один и тот же: ваша строка не содержит числа. Прочитайте Как задать вопрос и поделитесь своими исследованиями.   -  person CodeCaster    schedule 16.03.2017


Ответы (1)


В документации Conver.ToInt32 говорится нам, что FormatException выбрасывается, когда:

значение не состоит из необязательного знака, за которым следует последовательность цифр (от 0 до 9).

Таким образом, в основном ваша строка может иметь только этот формат + или -, за которым следуют цифры, которые не могут быть разделены пробелом или чем-либо еще, кроме цифры.

ToInt32 даже настолько справедлив, что позволяет вам иметь предшествующий или завершающий пробел;)

Редактировать:

Формат подразумевается так:

string input_pos = "+42"; // or
string input_neg = "-42";
Convert.ToInt32(input_pos) + Convert.ToInt32(input_neg);    
                           ^
                           |
                        //This has nothing to do with the format!

формат относится к строке, которую вы передаете в качестве параметра в метод ToInt32(), а не к тому, как вы вычисляете полученные числа!

По-видимому, у вас есть плавающее число в вашем массиве 3.49, его нельзя преобразовать в int, но можно преобразовать в double:

double tot = (Convert.ToDouble(a[4]) * Convert.ToDouble(a[5]));

вызов ToString() не нужен

person Mong Zhu    schedule 16.03.2017
comment
любой способ знака умножения, пожалуйста - person khans; 16.03.2017
comment
@khans, проблема не в звездочке между вызовами Convert.ToInt32(), а в строке, которую вы передаете этому методу. - person CodeCaster; 16.03.2017
comment
`? Я не совсем понимаю тебя. Но ничего кроме + или - не допускается. это как в математике, знак определяет положительное число или отрицательное - person Mong Zhu; 16.03.2017
comment
@khans Пожалуйста, поместите эту строку в свое приложение System.Diagnostics.Debug.WriteLine(String.Join(" ", a)); и опубликуйте вывод из окна вывода. - person Mong Zhu; 16.03.2017
comment
@khans, как вы можете видеть '.' не допускается. Вам нужно будет преобразовать его в «двойной». Я редактирую свой ответ через секунду - person Mong Zhu; 16.03.2017
comment
но со знаком + тоже не работает - person khans; 16.03.2017
comment
@khans формат относится к строке, которую вы передаете в качестве параметра в метод ToInt32(), а не к тому, как вы вычисляете полученные числа! Смотрите мое редактирование - person Mong Zhu; 16.03.2017
comment
Спасибо все заработало теперь ура дружище - person khans; 16.03.2017
comment
@khans Добро пожаловать. В следующий раз сначала проверьте формат, а затем решите, как конвертировать ;) - person Mong Zhu; 16.03.2017