#c#
#c#
Вопрос:
У меня возникли трудности с созданием цикла для этой проблемы.
Для расчета подоходного налога требуется, чтобы приложение суммировало все налоги из всех предыдущих налоговых скобок в скобку дохода, как показано в таблице. а) Кроме того, вы должны использовать циклы для решения этой проблемы.
Это то, что у меня есть до сих пор
int[] upper = { 9525, 38700, 82500, 157500, 200000, 500000, };
int[] rate = { 10, 12, 22, 24, 32, 35, 37 };
double tax;
Write("Please enter your income >> ");
double income = Convert.ToInt32(ReadLine());
for (int i = 0; i < upper.Length; i )
{
if (income <= upper[i])
{
tax = income * rate[i];
}
}
Логика цикла должна функционировать следующим образом, если доход составлял 100 000 долларов
IncomeTax =
($ 9,525[upper[0]]) * 10%[rate[0]]
($38,700[upper[1]] - $9,525[upper[0]]) * 12%[rate[1]]
($82,500[upper[2]] - $38,700[upper[1]]) * 22%[rate[2]]
($100,000[income] - $82,500[upper[2]]) * 24%[rate[3]] = $18,289.50[total]
Любая помощь была бы очень признательна!
Комментарии:
1. Это похоже на школьный проект!!
2. в этом случае вам больше ничего не нужно
3. вставьте свой код сюда
4. Не включайте свой код в виде картинок. Добавьте свой код к вашему вопросу. Также будьте конкретны в своем вопросе и не задавайте несколько вопросов к одному сообщению.
5. это даст только последний налог, если вы хотите, чтобы все налоги суммировались, а затем добавляли предыдущий налог каждый раз в цикле
Ответ №1:
Слишком много проблем с этим небольшим кодом.
- Вы переписываете «Налог», в то время как вы хотите суммировать значение всех налогов, чтобы получить один результирующий налог
- ваше условие
income <= upper[i]
для расчета налога не подходит в этом контексте - вы рассчитываете налог не на дельту,
(upper[i] - upper[i -1])
а наupper[i]
только - Ваша формула для расчета налога неверна.
- вы должны разорвать цикл, как только обнаружите, что ваш доход меньше, чем slab (верхний [i])
Но, по крайней мере, я мог видеть ваши усилия, и поэтому я публикую один рабочий код для вашей ссылки (вы можете улучшить его дальше)
//added , 9999999999 to make the last slab (37%) tends to infinite
long[] upper = { 9525, 38700, 82500, 157500, 200000, 500000, 9999999999 };
int[] rate = { 10, 12, 22, 24, 32, 35, 37 };
double tax = 0.0;
Console.WriteLine("Please enter your income >> ");
//if income is of double data type, we should convert console into double instead of int
double income = Convert.ToDouble(Console.ReadLine());
double taxCalculatedAmount = 0.0;
for (int i = 0; i < upper.Length; i )
{
//Note: here I am calculating the delta
//which I will use to calculate the tax for the slab.
double incomeToCalculateTax =
upper[i] <= income ? (i == 0 ? upper[i] : upper[i] - upper[i - 1]) :
(i == 0 ? income : income - upper[i - 1]);
//Condition which will check if amount on which we have calculated tax is exceeding total amount
if (income > taxCalculatedAmount)
{
//proper formula of calculating tax
tax = (incomeToCalculateTax * rate[i]) / 100;
taxCalculatedAmount = incomeToCalculateTax;
}
else
break;
}
Комментарии:
1. Ваша помощь определенно подтолкнула меня в правильном направлении. Большое вам спасибо!
Ответ №2:
Ниже приведена автономная статическая функция, вычисляющая требуемый результат. Хотя это, вероятно, не имеет значения для выполнения упражнения, в целом рекомендуется не использовать числа с плавающей запятой для расчетов с валютой, потому что вы можете потерять точность при работе с большими суммами; либо конвертируйте в наименьшие единицы (центы или что-то еще) и используйте целые числа (или длинные), либо используйте десятичные дроби, как сделано ниже.
public static decimal IncomeTax(decimal income)
{
// Only positive income can be taxed
if (income <= 0M) return 0M;
// Initialize bracket limits and rate percentages
int[] brackets = { 0, 9525, 38700, 82500, 157500,
200000, 500000, int.MaxValue };
int[] rates = { 10, 12, 22, 24, 32, 35, 37 };
// Start with zero tax
decimal tax = 0M;
// Loop over tax rates and corresponding brackets
for (int i = 0; i < rates.Length; i )
{
// Calculate amount of current bracket
int currBracket = brackets[i 1] - brackets[i];
// If income is below lower bound, exit loop
if (income < brackets[i]) break;
// If income is between lower and upper bound,
if (income < brackets[i 1])
{
// adjust bracket length accordingly
currBracket = income - brackets[i];
}
// Add tax for current bracket to accumulated tax
tax = (rates[i] / 100M) * currBracket;
}
// Return result
return tax;
}