2016-11-07 9 views
-1

Also muss ich eine Methode erstellen, wo ich Jahre und Menge eingeben und das Konsolenprogramm wird ein Diagramm ausgeben, das die doppelt degressive Abschreibung zeigt.Double Declining Balance In C#

Das ist was ich habe.

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

Jetzt, wenn ich das Programm ausführen wird es nicht abwerten. Die Formel ist richtig, ich denke, ich bin verwirrt, warum es nicht abwertet, was bedeutet, wenn ich 5 Jahre und einen Betrag von 5000 $ eingeben; es wird nur 5000 für alle 5 Jahre angezeigt.

+1

Sie aktualisieren nie 'Menge', so dass Ihre Ausgabe für jede Schleife gleich ist. –

+0

Dies wäre eine perfekte Zeit zu lernen, den Debugger zu verwenden, um durch Ihren Code zu gehen, der Ihnen das Problem in zwei oder drei Durchläufen durch die Schleife gezeigt hätte. –

Antwort

0

Sie subtrahieren jede Iteration der Schleife vom ursprünglichen Betrag, was bedeutet, dass Sie nicht von dem aktuellen Kontostand jedes Jahr abschreiben, sondern vom Anfangsbestand.

Wenn amount den ursprünglichen Betrag darstellt und amountLeft repräsentiert den aktuellen Saldo, versuchen Sie die Schleife in so etwas wie dieses bearbeiten

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

Wechsel: Wie @ Jim darauf hingewiesen, es gibt einen anderen Fehler mit Ihrem Code. Da Sie um (2/years) Paranthesen hinzugefügt haben, wird die Abschreibung wahrscheinlich Null sein (d. H. Es sei denn, Jahre sind 1 oder 2), da das Berechnen als ganzzahlige Division erfolgt. Entfernen Sie entweder die Klammern oder lassen Sie den Wert 2 als Fließkommawert anzeigen.

+0

Das ist Teil der Lösung. Es gibt zwei Zeilen, die 'menuLeft' in der Schleife setzen; beide müssen angesprochen werden. –

+0

@DStanley, stimmt. Ich habe nicht gesehen, dass die gleiche Variable neu zugewiesen wurde. Antwort aktualisiert – Krumelur

+1

Und jetzt fragt sich das OP, warum es immer noch 5000 auf allen Linien ist :) – Jim