Lynky: zinz und zinzeszinz *ARG*

Hi,
fuer ein englischsprachiges Property Management System versuche ich gerade Zinsen und spaeter die Gesamtrueckzahlung eines Kredites zu berechnen und zwar fuer

  1. interests only (nur Zinsen)
  2. compound interest (Zinzeszinz?)

so weit so gut. Habe mir von Wikipedia mal so ca. 10-20 Formeln besorgt (http://en.wikipedia.org/wiki/Interest) und mir daraus folgende Javascriptformeln zusammengeschustert, die mir zunaechst einmal NUR die Gesamtzinsen berechnen:

  1. loan * ((rate/100) * term)    --> funktioniert
  2. (loan * Math.pow(1+(rate/cperiod),cperiod*term)) - loan     ---> falsche Werte

Anmerkung: cperiod ist die compound period (z.B. 2 fuer halbjaehrige Zahlung) und rate ist der in einen floatwert umgerechnete Zinssatz.

Ich weiss sehr wohl, das ist ein ziemlich ekelhaftes Thema *gg* aber vielleicht weiss doch jemand Rat, wie ich die 2. Formel loesen kann.

Vielen Dank im voraus,

Lynky

  1. Hallo,

    (http://en.wikipedia.org/wiki/Interest) und mir daraus folgende

    Wie Links hier anklickbar gemacht werden, steht in der FAQ -- Du erleichterst damit den Lesern Deines Beitrags die Arbeit.

    1. (loan * Math.pow(1+(rate/cperiod),cperiod*term)) - loan     ---> falsche Werte

    Was heisst "falsche Werte"? Gib mal Beispielwerte an, was Deiner Meinung nach schief laeuft. Wenn "rate" naemlich der selbe Wert wie unter 1) ist, ist allerdings ziemlich klar, was in die Hose geht (setze cperiod mal auf "1" und ueberlege Dir dann, was fuer eine enorme Verzinsung Du haettest.

    Noch was anderes: ich halte Deine Variablennamen fuer suboptimal:
    cperiod ist > 1 und eine natuerliche Zahl, schreib das besser als cperiods.
    Dito fuer term.
    rate sollte den Zinssatz nicht in Prozent sondern als normale Zahl beinhalten (also 0,05 statt 5). Fuer jede Berechnung wirst Du naemlich die 0,05 brauchen. Dann ersparst Du Dir auch die Divisionen durch 100.

    Gruss
    Thomas

    1. Hi Thomas,
      danke fuer Deine Antwort!

      Was heisst "falsche Werte"? Gib mal Beispielwerte an

      loan    = 100;
      rate    = 0.1;  // 10%
      terms   = 3;    // for 3 years
      cperiod = 2;    // half-yearly

      ergibt bei mir z.B. Gesamtzinsen von 34.01

      Noch was anderes: ich halte Deine Variablennamen fuer suboptimal

      Weiss nicht, ob Du da Recht hast. Denn sprichst Du auch von Abrechnungszeitraeumen oder - Intervallen?
      Allerdings: Meine Posting-ueberschrift hingegen sollte wirklich geandert werden in ZinSesZinSen ;) Das viel mir gerade erst auf *peinlichis*

      rate sollte den Zinssatz nicht in Prozent sondern als normale Zahl beinhalten

      da hast Du was falsch verstanden, denn rate ist bereits eine normale Zahl, wie ich bereits schrieb in

      »»rate ist der in einen floatwert umgerechnete Zinssatz

      Sorry, wenn meine Antwort rechthaberisch klingen sollte - das ist sicherlich nicht meine Absicht.

      Gruesse,

      Lynky

      1. Hallo,

        Was heisst "falsche Werte"? Gib mal Beispielwerte an

        loan    = 100;
        rate    = 0.1;  // 10%
        terms   = 3;    // for 3 years
        cperiod = 2;    // half-yearly

        ergibt bei mir z.B. Gesamtzinsen von 34.01

        Das stimmt doch, wenn bei 10% Jahreszins halbjährlich verzinst wird.

        year  period interest        value
        1     1         5               105
        1     2         5,25            110,25
        2     3         5,5125          115,7625
        2     4         5,788125        121,550625
        3     5         6,07753125      127,6281563
        3     6         6,381407813     134,0095641
              sum       34,00956406

        viele Grüße

        Axel

        1. Hi Axel,

          ja, wahrscheinlich hast Du Recht. Ich glaube, das Problem liegt nicht in der Formel sondern in der englischen Sprache. Ich war die ganze Zeit der Meinung, dass die gezahlten Zinsen pro Jahr abnehmen muessen, dass ist aber wohl bei dieser Methode NICHT der Fall.
          Wenn ich richtig liege gibt es demnach 3 verschiedene Verzinsungsmoeglichkeiten:

          1. Interests only
          2. Principal and Interests (das was ich eigentlich wollte)
          3. Compound Interests

          Vielen Dank auch an Siechfred fuer die Formelsammlung, die kann ich sehr gut gebrauchen um die Principal and Interests am Montag nachzuschlagen!

          Sorry, habe jetzt Feierabend und sehe zumindest HEUTE Antworten nicht mehr ein, was ich aber am Montag auf jeden Fall nachholen werde!

          Schoenes Wochenende,

          Lynky

      2. Hallo,

        loan    = 100;
        rate    = 0.1;  // 10%

        Dann ist "rate" in Deiner zweiten Formel anders als in Deiner ersten (in Deiner ersten Formel ist es der Zinssatz in Prozent, in der zweiten dann nicht mehr).

        Weiss nicht, ob Du da Recht hast. Denn sprichst Du auch von Abrechnungszeitraeumen oder - Intervallen?

        Keine Ahnung. Aber wenn Du das jemandem erklaerst, sagst Du dann: 'das ist die Anzahl der Abrechungszeitraum_ oder Abrechnungszeitraeume'? Es kann natuerlich sein, dass die Variablennamen vorgegeben sind, dass ist das egal.

        Gruss
        Thomas

  2. Tag Lynky.

    1. (loan * Math.pow(1+(rate/cperiod),cperiod*term)) - loan     ---> falsche Werte

    Du willst sicher diese Formel umsetzen:

    Evtl. hilft dir diese Formelsammlung mit Erläuterungen (MS Word) ja weiter. Da müsstest du erstmal die Formel raussuchen, die deiner Vorgabe entspricht.

    Nehmen wir mal an, du wolltest Zins und Zinseszins bei regelmäßiger Einzahlung. Dafür brauchst du erstmal den Aufzinsungsfaktor, für diesen wiederum brauchst du den Jahreszins:

    function Aufzinszungsfaktor(zinssatz) {  
      var faktor = 1+(zinssatz/100);  
      return faktor;  
    }
    

    Weiter geht's dann mit den eigentlichen Formeln. Angenommen, du hast regelmäßige unterjährig vorschüssige Einzahlungen und willst wissen, wieviel unter Berücksichtigung von Zins und Zinseszins am Ende rauskommt:

    // E: Rate in Euro  
    // p: Zinssatz p.a.  
    // m: Zahlungsweise  
    // n: Laufzeit in Jahren  
    function Barwert(E,p,m,n) {  
      var q = Aufzinsungsfaktor(p);  
      var kapital = E*(m+(((m+1)*p)/200))*((Math.pow(q,n)-1)/(q-1));  
      var gesamt = E*m*n;  
      var zinseszins = kapital - gesamt;  
      alert("Summe der Einzahlungen: "+gesamt.toString()+"\nGesamtkapital: "+kapital.toString()+"\nZinseszins: "+zinseszins);  
    }
    

    Das ergibt (noch entsprechend formatiert):
    Gesamtkapital = 27.062 EUR
    Einzahlungen = 18.000 EUR
    Zins und Zinseszins = 9.062 EUR

    Meintest du das so?

    Siechfred

  3. Hello,

    mit einem Computer kann man das meistens viel genauer mit einer Iteration ausrechnen. Es gibt hier auch schon eine Lösung dafür im Archiv. Soweit ich mich daran erinnern kann, reichten vier Iterationen schon aus, um ein Ergebnis auf zwei Stellen hinter dem Komma (Währungsformat) zu erhalten.

    Die Funktionen haben nämlich den Nachteil, dass sie mit höheren Exponenten extrem ungenau werden.

    Harzliche Grüße vom Berg
    esst mehr http://www.harte-harzer.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau