Kapital abzinsen

petergunter

Mitglied
Hallo. Und zwar soll ich ermitteln welches Kapital Kn ich in n Jahren angelegt haben müsste, um heute auf ein Kapital K0, bei gegebenen zinssatz durch abzinsen, zu kommen.

Mein (nicht funktionierender Vorschlag)

Java:
public static double abzinsen(int k,int l,double z, double pot){
         System.out.println("Kapitalberechung:" + k+" Euro angelegt auf " + l + " Jahre, zu "+ z+"%");
         System.out.println("Ihr Kapital heute: "+ k);
         for (int i=0; i<l;i++){
       
        
         double pot=Math.pow(2,l);
       
         k+ = k * 1/pot;
         }
                
         System.out.println("Ihr Kapital in "+ l+" Jahren beträgt "+ k+"Euro");

... welche Fehler hab ich gemacht?^^
Hoffe um hilfe, mfg

Benötigte Formel
k0 = Kn * (1/(1+i)^n
 
Zuletzt bearbeitet von einem Moderator:
X

Xyz1

Gast
Java:
    public static void dasKapital() {
        double start = 1000;
        double stop = 999999;
        double z = 1.05; // utopisch, egal
        int i = 0;
        while (start < stop) {
            start *= z;
            i++;
            System.out.println("start = " + start);
            System.out.println("stop = " + stop);
            System.out.println("i = " + i);
            System.out.println("--- --- ---");
        }
    }

Nach 142 Jahren wärs so weit. :eek:
(Das ist nur ein Beispiel, durch Umstellen der Formel erreicht man sicher auch einiges..)
 

petergunter

Mitglied
ich hab vielleicht die frage falsch gestellt :/
Ein KapitalN soll n Jahre abgezinst werden bis das Kapital0 erreicht wird.. Das heißt die "unbekannte" ist Kapital0. Das geht mit deinem Code nicht, falls ich das nicht falsch lese...
 
X

Xyz1

Gast
Ein KapitalN soll n Jahre abgezinst werden bis das Kapital0 erreicht wird.. Das heißt die "unbekannte" ist Kapital0. Das geht mit deinem Code nicht, falls ich das nicht falsch lese...
Hmmmm, dann wäre es nicht start *= z; sondern start /= z;, nun streng dich mal ein bisschen an, deine Motivation ist ja bei null. ;)
Meine auch. :(
 

Meniskusschaden

Top Contributor

petergunter

Mitglied
Jetzt hab ich selbst die Aufgabe falsch gelesen. Ich soll für jedes Jahr N das entsprechende Kapital ausgeben
Also so etwa:
Anlagebetrag heute: 1000 Euro
Anlagebetrag in 1 Jahr: 1100 Euro
Anlagebetrag in 2 Jahren: 1210 Euro
Anlagebetrag in 3 Jahren: 1331 Euro etc.

trotzdem danke für die hilfe...
 

petergunter

Mitglied
Habs jetzt so..
Java:
 [public static double abzinsen(double k,int l,double z){
         System.out.println("Kapitalberechung:" + k+" Euro angelegt auf " + l + " Jahre, zu "+ z+"%");
         System.out.println("Ihr Kapital heute: "+ k);
         for (int i=0; i<l;i++)
            
         {k = +k /(1+(-z/100));
         System.out.println("Sie hätten in Jahr "+ l+"," + k+" Euro anlegen müssen");
         }
        
         return k;
        }
]
nur komm ich nicht drauf wie man die Ausgabe für jedes Jahr n das enstsprechende Jahr ändert... also:
Sie hätten im Jahr 1 X anlegen müssen
Sie hätten im Jahr 2 X2 anlegen müssen etc...
Das kann man doch auch irgendwie mit der for schleife machen oder?
 

petergunter

Mitglied
Oh, ich hätte bei der ausgabe einfach anstatt l, das i nehmen müssen...
Danke für die hilfe und sorry für die beschränkten fragen, hab heute erst mit java angefangen und bin momentan noch bisschen durcheinander :'D
 
X

Xyz1

Gast
Wieso denn Konjunktiv? Bezieht es sich auf Vergangenheit/Zukunft?
Mit der Formel oben auch so zu schreiben:
Java:
    public static void dasKapital() {
        double start = 1000;
        double stop = 999999;
        int z = 5; // utopisch, egal
        for (int i = 0; i < 10; i++) {
            double temp = start * Math.pow((100 + z) / 100.0, i);
            System.out.println("Nach " + i + " Jahre beträgt das Kapital " + temp);
        }
    }

Code:
Nach 0 Jahre beträgt das Kapital 1000.0
Nach 1 Jahre beträgt das Kapital 1050.0
Nach 2 Jahre beträgt das Kapital 1102.5
Nach 3 Jahre beträgt das Kapital 1157.6250000000002
Nach 4 Jahre beträgt das Kapital 1215.5062500000001
Nach 5 Jahre beträgt das Kapital 1276.2815625000003
Nach 6 Jahre beträgt das Kapital 1340.0956406250004
Nach 7 Jahre beträgt das Kapital 1407.1004226562504
Nach 8 Jahre beträgt das Kapital 1477.455443789063
Nach 9 Jahre beträgt das Kapital 1551.3282159785163

Kapital ist vielleicht falscher Begriff - wie gesagt, damit kenne ich mich nicht aus, also ich bin nicht bei einer Bank tätig Ähnliches.

Verstehst du denn diese Zeile mit temp und Ausgabe?
Grüße
---- ---- ----
Beides in 1:
Java:
    public static void dasKapital() {
        double start = 1000;
        double stop = 999999;
        double temp1;
        int z = 5; // utopisch, egal
        double temp2 = start / ((100 + z) / 100.0);
        for (int i = 0; i < 100; i++) {
            temp1 = start * Math.pow((100 + z) / 100.0, i);
            temp2 *= (100 + z) / 100.0;
            System.out.println("Nach " + i + " Jahre beträgt das Kapital " + temp1);
            System.out.println("Nach " + i + " Jahre beträgt das Kapital " + temp2);
        }
    }

Code:
Nach 98 Jahre beträgt das Kapital 119275.51732091066
Nach 98 Jahre beträgt das Kapital 119275.51732091061
Nach 99 Jahre beträgt das Kapital 125239.29318695619
Nach 99 Jahre beträgt das Kapital 125239.29318695614

                                  125239,29318695567145295003056544 (Windows-Taschenrechner)

temp2 ist genauer, da näher dran
---- ---- ----
Allgemein mit double immer aufpassen, denn double hat mehrere Fehler und weicht von dem Wert ab, wie man an dem Beispiel schaun kann.
 
Zuletzt bearbeitet von einem Moderator:

petergunter

Mitglied
Java:
[double temp2 = start /((100+ z)/100.0);]
Wolltest du hier die Nachkommastellen runden?
Genau das probier ich grad... bekomm es aber nicht hin- hab vermutet dass es so klappt:
Java:
[ }
             
         k = Math.round(k*100)/100;    
         
         return k;
         }]
 

Meniskusschaden

Top Contributor
Genau das probier ich grad... bekomm es aber nicht hin- hab vermutet dass es so klappt:
Java:
[ }
           
         k = Math.round(k*100)/100;  
       
         return k;
         }]
Im Prinzip müsste es so funktionieren. Aber Math.round() liefert ein Ergebnis vom Typ long, also einen ganzzahligen Datentyp. Wenn du den durch 100 dividierst, erfolgt eine Ganzzahldivision, so dass die gewünschten Nachkommastellen verloren gehen. Versuch' mal, statt durch 100 durch 100.0 zu dividieren.
 
X

Xyz1

Gast
Runden geht so:
Java:
    public static void dasKapital() {
        double start = 1000;
        double stop = 999999;
        double temp1;
        int z = 5; // utopisch, egal
        double temp2 = start / ((100 + z) / 100.0);
        for (int i = 0; i < 10; i++) {
            temp1 = start * Math.pow((100 + z) / 100.0, i);
            temp2 *= (100 + z) / 100.0;
            System.out.println("Nach " + i + " Jahre beträgt das Kapital gerundet " + Math.round(temp1 * 100) / 100.0 + " genau " + temp1);
            System.out.println("Nach " + i + " Jahre beträgt das Kapital gerundet " + Math.round(temp2 * 100) / 100.0 + " genau " + temp2);
        }
    }

Code:
Nach 0 Jahre beträgt das Kapital gerundet 1000.0 genau 1000.0
Nach 0 Jahre beträgt das Kapital gerundet 1000.0 genau 1000.0
Nach 1 Jahre beträgt das Kapital gerundet 1050.0 genau 1050.0
Nach 1 Jahre beträgt das Kapital gerundet 1050.0 genau 1050.0
Nach 2 Jahre beträgt das Kapital gerundet 1102.5 genau 1102.5
Nach 2 Jahre beträgt das Kapital gerundet 1102.5 genau 1102.5
Nach 3 Jahre beträgt das Kapital gerundet 1157.63 genau 1157.6250000000002
Nach 3 Jahre beträgt das Kapital gerundet 1157.63 genau 1157.625
Nach 4 Jahre beträgt das Kapital gerundet 1215.51 genau 1215.5062500000001
Nach 4 Jahre beträgt das Kapital gerundet 1215.51 genau 1215.5062500000001
Nach 5 Jahre beträgt das Kapital gerundet 1276.28 genau 1276.2815625000003
Nach 5 Jahre beträgt das Kapital gerundet 1276.28 genau 1276.2815625000003
Nach 6 Jahre beträgt das Kapital gerundet 1340.1 genau 1340.0956406250004
Nach 6 Jahre beträgt das Kapital gerundet 1340.1 genau 1340.0956406250004
Nach 7 Jahre beträgt das Kapital gerundet 1407.1 genau 1407.1004226562504
Nach 7 Jahre beträgt das Kapital gerundet 1407.1 genau 1407.1004226562504
Nach 8 Jahre beträgt das Kapital gerundet 1477.46 genau 1477.455443789063
Nach 8 Jahre beträgt das Kapital gerundet 1477.46 genau 1477.455443789063
Nach 9 Jahre beträgt das Kapital gerundet 1551.33 genau 1551.3282159785163
Nach 9 Jahre beträgt das Kapital gerundet 1551.33 genau 1551.3282159785163

Du siehst, jetzt wird es unübersichtlich.

An der Stelle kommen dann Klassen, Objekte und Methoden ins Spiel...
Java:
            System.out.println("Nach " + i + " Jahre beträgt das Kapital gerundet " + beautify(temp1) + " genau " + temp1);
            System.out.println("Nach " + i + " Jahre beträgt das Kapital gerundet " + beautify(temp2) + " genau " + temp2);
        }
    }

    public static String beautify(double d) {
        // d = Math.round(d * 100.0) / 100.0f;
        return String.format(java.util.Locale.US, "%.02f", d);
    }

---- ---- ----
Im Prinzip müsste es so funktionieren. Aber Math.round() liefert ein Ergebnis vom Typ long, also einen ganzzahligen Datentyp. Wenn du den durch 100 dividierst, erfolgt eine Ganzzahldivision, so dass die gewünschten Nachkommastellen verloren gehen. Versuch' mal, statt durch 100 durch 100.0 zu dividieren.

Du siehst doch, dass ich am Antworten bin... musste nur zwischendurch auf SO nach Fallstricke bei format() suchen, nicht, dass auf einmal die französische Darstellung...
 
Zuletzt bearbeitet von einem Moderator:

Neue Themen


Oben