2016-11-07 2 views
-1

私は年と金額を入力するメソッドを作成する必要があり、コンソールプログラムは二重減価償却償却を示すグラフを出力します。Double Declining balance in 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ドルを入力すれば、すべての5年間に5000回しか表示されません。

+1

あなたは 'amount'を更新することはないので、出力はそれぞれのループと同じになります。 –

+0

これは、デバッガを使用してコードをステップ実行する方法を学ぶのに最適な時間です。ループを2回または3回通過する際に問題が発生していたはずです。 –

答えて

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); 
} 

編集のようなものの中にループを変更してみてください:@Jimが指摘したように、あなたのコードで別のエラーがあります。 (2/years)の周りに小括弧を追加したため、計算が整数除算として実行されるため、減価償却はゼロになる可能性があります(つまり、年が1または2でない限り)。 paranthesesを削除するか、2を浮動小数点値にします。

+0

これは修正の一部です。ループ内に 'amountLeft'を設定する2行があります。どちらも対処する必要があります。 –

+0

@DStanley、True私は同じ変数が再割り当てされているのを見ていませんでした。回答が更新されました。 – Krumelur

+1

そして、今OPはなぜそれがすべての行でまだ5000であるのだろうと思っています:) – Jim