2009-04-15 1 views
3

Мне нужна очень точная формула калькулятора. Прямо сейчас моя формула работает для ежемесячных взносов с ежемесячной рецептурой, но когда вы используете еженедельные вклады с ежемесячной рецептурой, я не знаю, как настроить формулу. Вы можете увидеть мой калькулятор в действии, загрузив и распакуя прикрепленные файлы.Как рассчитать ежедневный, недельный, ежемесячный сложный процент, точно в Javascript?

До сих пор this is the most accurate calculator Я нашел в Интернете. Я был бы рад, если бы смог получить формулу Javascript, чтобы соответствовать значениям, генерируемым этим калькулятором.

Проблема с еженедельными взносами и ежемесячной рецептурой заключается в том, что, хотя есть 52 недели в году, некоторые месяцы имеют 5 недель, а у других - 4. Я не думаю, что их калькулятор учитывает это; Я думаю, что они просто основывают свои расчеты на 52 недели и каждые 4 недели, они усугубляют интерес.

Вот формула я использую:

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; 

Учитывая сценарий

  • $ 1000 принципала,
  • $ 50 за неделю вклад,
  • 10 лет,
  • месячная рецептура,

другой калькулятор говорит, что total должен быть $ 30,007, округляя десятичные знаки вверх. Ближайший я пришел к этому использует эту формулу является еженедельными взносами и еженедельном рецептуре (Но я хочу ежемесячно рецептуру!):

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

Как я могу сделать свою формулу работы для еженедельных и ежедневных взносов?

ответ

1

Ну ... Оба эти неточные из этого калькулятора, но, возможно, более точно, как все на самом деле сделаны (не уверены, однако, потому что я не знаю, как это на самом деле сделано):

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