Взято из Википедии:
В компьютерном программировании происходит целочисленное переполнение, когда арифметическая операция пытается создать числовое значение, выходящее за пределы диапазона, который может быть представлен заданным количеством цифр.- либо больше максимального, либо ниже минимального представимого значения.
Вы определяете Public taxRates As Integer
.Тип Integer
имеет ограничения -32,768 to 32,767
.
Однако, если я воспользуюсь этой операцией (думаю, у меня тоже возникнет такая же проблема):
Case Is >= 600001
taxRates = ((19050 * 0.1) + (58349 * 0.12) + _
(87599 * 0.22) + (149999 * 0.24) + (84999 * 0.32) + _
(199999 * 0.35) + ((grossIncome - 600000) * 0.37))
..и я заменяю grossIncome
на 600001
(минимальный лимит, чтобы попасть внутрь), я получаю значение 161,378.12
, которое намного больше верхнего предела Integer
.
Следовательно, вы получаетеoverflow
.Также обратите внимание, что Integer
не имеет десятичных дробей, тогда как taxRates
, скорее всего, будет иметь десятичные дроби, исходя из их соотношения.
Ваше решение состоит в том, чтобы объявить Public taxRates As Double
.Я также предлагаю вам прочитать эту вики-страницу, описывающую все типы данных и их ограничения .
Кроме того, grossIncome
должно быть Decimal
(иначе у вас возникнет та же проблема).