2009-04-15 4 views
3

Ich brauche eine sehr genaue Berechnungsformel. Im Moment funktioniert meine Formel für monatliche Beiträge mit monatlicher Verzinsung, aber wenn Sie wöchentliche Beiträge mit monatlicher Verzinsung verwenden, weiß ich nicht, wie ich die Formel anpassen soll. Sie können meinen Rechner in Aktion sehen, indem Sie die angehängten Dateien herunterladen und entpacken.Wie berechne ich tägliche, wöchentliche, monatliche Zinseszinsen genau in Javascript?

Bisher this is the most accurate calculator Ich habe im Internet gefunden. Ich würde mich freuen, wenn ich eine Javascript-Formel bekommen könnte, die den von diesem Rechner generierten Werten entspricht.

Das Problem mit wöchentlichen Beiträgen und monatlichen Compoundierung ist, dass es zwar 52 Wochen in einem Jahr sind, einige Monate haben 5 Wochen und andere haben 4. Ich glaube nicht, dass ihr Rechner dies berücksichtigt; Ich denke, dass sie ihre Berechnung einfach auf 52 Wochen basieren und alle 4 Wochen die Zinsen zusammenzählen. Hier

ist die Formel, ich verwende:

var P = startingAmount; 
var Y = yearsOfInvesting; 
var c = getAdditionalContributionsPerPeriod; 
var t = getTermsPerPeriod; 
var n = t * Y; 
var r = interestRate/100/t; // interestRate [%] 
var z = 1 + r; 
total = P * Math.pow(z, n) + c * (Math.pow(z, n + 1) - z)/r; 

In einem vorgegebenen Szenario von

  • $ 1000 principal,
  • $ 50 pro Woche Beitrag,
  • 10 Jahren
  • monatliche Compoundierung,

der andere Rechner sagt total 30.007 $ sein sollte, bis die Dezimalstellen gerundet wird. Die nächstgelegene ich dazu gekommen ist, mit dieser Formel ist durch wöchentliche Beiträge und wöchentliche Compoundierung (Aber ich monatlich Compoundierung will!):

var P = 1000;//startingAmount; 
var Y = 0;//yearsOfInvesting; 
var c = 50;// 
var n = 520;//t * Y; 
var r = .02/52; 
var z = 1 + r; 

mz = P * Math.pow(z, n) + c * (Math.pow(z, n + 1) - z)/r; 
document.write(mz); 

Wie kann ich meine Formel Arbeit für Wochen- und Tag Beiträge zu leisten?

Antwort

1

Nun ... Beide sind leicht weg von dem Rechner, aber möglicherweise genauer, wie die Dinge wirklich getan (nicht sicher, aber weil ich weiß nicht, wie es tatsächlich der Fall ist):

function calc(startingAmount, yearsOfInvesting, additionalContributionsPerPeriod, interestRate) { 
    var interestPerDay = (interestRate/365); 
    var total = startingAmount; 
    var date = new Date(new Date().getFullYear() + new Date().getMonth() + 1, 1); 
    var endDate = new Date(date.getFullYear() + yearsOfInvesting, date.getMonth(), date.getDate() - 1); 
    var startingWeekday = date.getDay(); 
    var startingDate = date.getDate(); 
    var runningInterest = 0; 
    while(Date.parse(date.toString()) < Date.parse(endDate.toString())) { 
     date.setDate(date.getDate() + 1); 
     runningInterest = runningInterest + total * interestPerDay; 
     if(date.getDay() == startingWeekday) { 
      total = total + additionalContributionsPerPeriod; 
     } 
     if(date.getDate() == startingDate) { 
      total = total + runningInterest; 
      runningInterest = 0; 
     } 
    } 
    total = total + runningInterest; 
    return total; 
} 
function calc2(startingAmount, yearsOfInvesting, additionalContributionsPerPeriod, interestRate) { 
    var interestPerDay = (interestRate/365); 
    var total = startingAmount; 
    var runningInterest = 0; 
    for(var day = 1; day <= 365 * yearsOfInvesting; day++) { 
     runningInterest = runningInterest + total * interestPerDay; 
     if(day % 7 == 0) { 
      total = total + additionalContributionsPerPeriod; 
     } 
     if(day % 30 == 0) { 
      total = total + runningInterest; 
      runningInterest = 0; 
     } 
    } 
    total = total + runningInterest; 
    return total; 
} 
document.write(3647 + "<br>" + calc(1000, 1, 50, 0.02) + "<br>" + calc2(1000, 1, 50, 0.02)); 
document.write("<br><br>"); 
document.write(6347 + "<br>" + calc(1000, 2, 50, 0.02) + "<br>" + calc2(1000, 2, 50, 0.02)); 
document.write("<br><br>"); 
document.write(14779 + "<br>" + calc(1000, 5, 50, 0.02) + "<br>" + calc2(1000, 5, 50, 0.02)); 
document.write("<br><br>"); 
document.write(30007 + "<br>" + calc(1000, 10, 50, 0.02) + "<br>" + calc2(1000, 10, 50, 0.02)); 
document.write("<br><br>"); 
document.write(31673 + "<br>" + calc(1000, 10, 50, 0.03) + "<br>" + calc2(1000, 10, 50, 0.03)); 
document.write("<br><br>"); 
document.write(33460 + "<br>" + calc(1000, 10, 50, 0.04) + "<br>" + calc2(1000, 10, 50, 0.04)); 
document.write("<br><br>"); 
document.write(35378 + "<br>" + calc(1000, 10, 50, 0.05) + "<br>" + calc2(1000, 10, 50, 0.05)); 
document.write("<br><br>"); 
document.write(772849953 + "<br>" + calc(1000, 55, 50, 0.20) + "<br>" + calc2(1000, 55, 50, 0.20)); 
Verwandte Themen