2015-01-14 2 views
-4

Я чтение данных из чтения данных и хочу, чтобы добавить некоторые значения в that.It дают мне ошибкуДобавить два значения-строки ввод не была в правильном формате

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

вот мой код

int OldAmount = 0; 
while (dr.Read()) 
{ 
    OldAmount = dr.GetInt32(0); 
} 
string CurrentAmount = (Convert.ToInt32(amnt) + Convert.ToInt32(OldAmount)).ToString(); 

Где amnt является string и имеет 23000 значение.

Есть ли что-то не так?

+2

Это не инт. Интс не имеет десятичных знаков. – Will

+0

'oldAmount' уже имеет тип' int'. –

+0

@ Rawling Вы уверены, что это хороший дубликат? Потому что дублировать parse 'string' на' double', но этот вопрос анализирует 'string' на' int': \ –

ответ

0

Convert.ToInt32 method использует текущие настройки культуры.

Похоже, ваши CurrentCulture «ы NumberDecimalSeparator property не . или/и с тех пор Convert.ToInt32 использует NumberStyles.Integer по умолчанию, вам необходимо NumberStyles.AllowDecimalPoint также указать свой десятичный разделитель.

Вместо этого вы можете использовать Int32.Parse(String, NumberStyles, IFormatProvider) overload;

int amnt = Int32.Parse("23000.00", 
         NumberStyles.Integer | NumberStyles.AllowDecimalPoint, 
         CultureInfo.InvariantCulture); //23000 

Тогда вы можете использовать это значение как;

string CurrentAmount = (amnt + OldAmount).ToString(); 

Кстати, так как ваша строка не имеет завершающую или ведущий пробел или ведущий знак, используя NumberStyles.Integer ненужен в вашем случае. Вы можете просто сделать;

int amnt = Int32.Parse("23000.00", 
         NumberStyles.AllowDecimalPoint, 
         CultureInfo.InvariantCulture); //23000 
+0

Вы отлично поработали ... вы спасли мне время. – user3913117

+0

@ user3913117 Рад помочь. –

0

Convert.ToInt зависит от вашего компьютера CurrentCulture.
Если ваш десятичный разделитель другой, который ., вы можете получить это исключение.

Вы можете использовать Int.Parse со спецификацией формата строки, например Int32.Parse("23000.00", NumberStyles.AllowDecimalPoint);.

Но вы уверены, что это должно быть int не decimal?

0

Вы конвертируете в int, в то время как у вас есть десятичная. Изменение convert.ToInt32(amnt) в convert.ToDecimal(amnt)

0

OldAmount это уже ИНТ, вам не нужно, чтобы преобразовать его снова. Попробуйте:

string CurrentAmount = (int.Parse("23000.00", NumberStyles.AllowDecimalPoint) + OldAmount).ToString(); 

или просто используйте десятичную запятую.

Смежные вопросы