2010-08-24 4 views
6

Исключения не отбрасываются, функция просто останавливает в этом заявлении:Convert.ToInt32 (поплавок) происходит сбой при попытке преобразовать поплавок Int32

int productQuantity = Convert.ToInt32("1.00"); 

и возвращаются.

Что я делаю неправильно, чтобы преобразовать этот поплавок в Int32?

Примечание: Я бегу в BackgroundWorkerThread.

+5

Это строка, а не поплавок. – NullUserException

+0

@NullUserException: Да, но я преобразовал ранее, если это просто «1» без десятичных знаков. – 2010-08-24 15:30:20

ответ

8

Исключение составляет в этом случае это просто не всплывает в отладчике. Эта строка не находится в формате, который можно преобразовать в тип Int32 и, следовательно, выбрасывает и исключает. Вы можете проверить это, обернув его в блок try/catch, если среда IDE не работает.

Лучшим подходом здесь является, вероятно, преобразование строки в double, а затем вручную отбросить ее до int. Это открывает дверь для потери данных из-за различий в точности. Но учитывая, что ваш вход находится в формате с плавающим стилем, это неизбежно, если вы хотите, чтобы конечный продукт был int

+1

+1 хорошие моменты на неуловимом исключении, легко забыть! – Abel

0

FormatException Строка ввода не была в правильном формате.

2

Исключено брошено, это просто, чтобы увидеть его, вы должны проверить свойство RunWorkerCompletedEventArgs.Error в обработчике событий для BackgroundWorker.RunWorkerCompleted.

Любое исключение, которое выбрасывается из потока рабочего фона при выполнении фоновой работы, присваивается этому свойству.

6

Сначала необходимо сначала преобразовать его в double, а затем преобразовать в Int32.

int productQuantity = Convert.ToInt32(double.Parse("1.00")); 
+0

со строками Я рекомендую всегда использовать 'TryParse', сэкономит вам массу неприятностей. – Abel

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