2016-11-07 2 views
-1

Так что мне нужно создать метод, в котором я вводим годы и сумму, а консольная программа выводит диаграмму, показывающую обесценивание с двойным снижением баланса.Двойной понижающий баланс в C#

Это то, что у меня есть.

static void doubleDecliningBalance(double amount, int years) 
    { 

     Console.WriteLine("{0,-20}{1,10}", "Year", "Depreciation"); 
     Console.WriteLine("----------------------------------");    
     int count = 0; 
     double depreciation, amountLeft = 0; 


     while (count < years) 
     { 
      amountLeft = amount; 
      count = count + 1;     
      depreciation = (amountLeft * (2/years)); 
      amountLeft = amount - depreciation; 
      Console.WriteLine("{0,-20}{1,10:C2}", count, amountLeft); 
     } 
    } 

Теперь, когда я запускаю программу, она не будет обесцениваться. Формула правильная, я думаю, поэтому я в замешательстве, почему она не обесценится, а это означает, что если я вступлю в 5 лет и сумму в 5000 долларов; он просто покажет 5000 за все 5 лет.

+1

вы никогда не обновляете 'amount', поэтому ваш вывод будет одинаковым для каждого цикла. –

+0

Это было бы прекрасное время, чтобы научиться использовать отладчик, чтобы пройти через ваш код, что показало бы вам проблему через два или три прохода через цикл. –

ответ

0

Вы вычитаете из первоначальной суммы каждую итерацию цикла, что означает, что вы не амортизируетесь от текущего баланса в каждый год, а из стартового баланса.

Если amount представляет собой первоначальную сумму и amountLeft представляет текущий баланс, попробуйте изменить цикл во что-то вроде этого

amountLeft = amount; 
while (count < years) 
{ 
    count = count + 1;     
    depreciation = (amountLeft * (2.0/years)); 
    amountLeft -= depreciation; 
    Console.WriteLine("{0,-20}{1,10:C2}", count, amountLeft); 
} 

Edit: Как @Jim указал, есть еще одна ошибка с кодом. Поскольку вы добавили скобки вокруг (2/years), амортизация, скорее всего, будет равна нулю (т. Е. Если годы не равны 1 или 2), из-за вычисления, выполняемого как целочисленное деление. Либо удалите скобки, либо пусть 2 будет значением с плавающей запятой.

+0

Это часть исправления. Есть две строки, которые устанавливают 'amountLeft' в цикле; они должны быть рассмотрены. –

+0

@DStanley, True. Я не видел, что одна и та же переменная была переназначена. Ответ обновлен. – Krumelur

+1

И теперь ОП задается вопросом, почему он все еще 5000 на всех линиях :) – Jim

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