【问题标题】:How do I calculate daily, weekly, monthly compound interest accurately in Javascript?如何在 Javascript 中准确计算每日、每周、每月的复利?
【发布时间】:2009-04-15 23:42:34
【问题描述】:

我需要一个非常准确的计算器公式。现在我的公式适用于每月复利的每月供款,但是当您使用每周供款和每月复利时,我不知道如何调整公式。您可以通过下载和解压缩附件来查看我的计算器。

到目前为止,我在网上找到了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);

如何使我的公式适用于每周和每日捐款?

【问题讨论】:

    标签: javascript finance


    【解决方案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 ) );
    

    【讨论】:

    • 您需要将闰年检查添加到您的 interestPerDay 计算中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-17
    相关资源
    最近更新 更多