【问题标题】:Calculating future value with compound interest with JavaScript用 JavaScript 计算复利的未来价值
【发布时间】:2011-01-17 11:22:41
【问题描述】:

我正在尝试编写一个脚本,其中用户插入月收入并在 30 年后获得复利的未来价值。就像现在一样,我已经为测试目的分配了一些值。

// Future Value
var investment = 800;
var annualRate = 2;
var monthlyRate = annualRate / 12 / 100;
var years = 30;
var months = years * 12;
var futureValue = 0;

for ( i = 1; i <= months; i++ ) {
    futureValue = futureValue + investment * Math.pow(1 + monthlyRate, months);
}

问题是,我实际上是从使用内置 FV() 公式的 Excel 电子表格构建的,当交叉检查时,我的结果完全不正确......知道我做错了什么,因为我我根本不喜欢金融数学。提前致谢。

【问题讨论】:

    标签: javascript finance


    【解决方案1】:

    Math.pow 是不必要的,因为您正在逐月计算和递增 futureValue。只需乘以1 + monthlyRate。您还想在相乘之前将投资的当前价值添加到新投资中:

    for ( i = 1; i <= months; i++ ) {
       futureValue = (futureValue + investment) * (1 + monthlyRate);
    }
    

    或者,您也可以使用以下公式一次性计算:

    futureValue = investment * (Math.pow(1 + monthlyRate, months) - 1) / monthlyRate;
    

    【讨论】:

    • 非常感谢!这似乎可以解决问题,通过使用 Math.floor 我可以更接近 Excel 结果。出于某种原因,我想到了这一点:FV = PV * (1+i)^t 这对于我试图做的事情来说是完全错误的......
    • @AlexBerg 该公式适用于年利率,其中 t 是年数。你计算的是,例如,如果我借给你 100 美元,你会在 3 年后一次性还给我利息。所以 pv 是 100,t 是 3。
    【解决方案2】:

    下面是计算复利的代码。

    function calculate() {
      p = document.getElementById("p").value;
      n = document.getElementById("n").value; // no. of compoundings per year
      t = document.getElementById("t").value; // no. of years
      r = document.getElementById("r").value;
      result = document.getElementById("result");
    
      // The equation is A = p * [[1 + (r/n)] ^ nt]
      A = (p * Math.pow((1 + (r / (n * 100))), (n * t)));
    
      // toFixed is used for rounding the amount with two decimal places.
      result.innerHTML = "The total amount is " + A.toFixed(2);
    
      result.innerHTML += "<br> The interest is " + (A.toFixed(2) - p).toFixed(2);
    }
    div {
      display: table-row;
    }
    
    label,
    input {
      display: table-cell;
    }
    <html>
    
    <head>
      <title>Compound Interest Calculation using jQuery</title>
    </head>
    <body>
      <h1>Compound Interest Calculation Using jQuery</h1>
      <div> <label>Amount: </label> <input id="p"> </div>
      <div> <label>Rate (%): </label> <input id="r"> </div>
      <div> <label>No. of Years: </label> <input id="t"> </div>
      <div> <label>Compunding Times Per Year: </label> <input id="n" value="1"> </div>
    
      <button onclick="calculate()">Calculate</button>
    
      <p id="result"></p>
    </body>
    
    </html>

    【讨论】:

    • DOM 获取和显示与问题完全无关。
    【解决方案3】:

    我也发现了这个替代方案:

    function compoundInterest(principal, annual_rate, n_times, t_years) {
        return principal*(Math.pow(1 + annual_rate/n_times, n_times*t_years) - 1);
    }
    

    【讨论】:

      【解决方案4】:
      function FVcalc(PresentAmount,InterestRate,NumberOfYears) {
          var timescompound = 1;
          var AnnualInterestRate = (InterestRate/100)/timescompound;
          var Years= NumberOfYears
      
          var Periods=timescompound*Years;
          var NumPayments=Periods;
          var Prin=PresentAmount;
      
          MonthPayment=Math.floor((Prin)*(Math.pow((1+AnnualInterestRate),(Periods)))*100)/100;
          FVFactor=(Math.pow((1+AnnualInterestRate),(Periods)))
          return MonthPayment
      }
      

      http://www.uic.edu/classes/actg/actg500/pfvatutor.htm

      【讨论】:

        【解决方案5】:

        这适用于任何情况,请注意 period 的基准是一年中的 1 次,例如每 6 个月 period = 2、4 个月 period = 3 等...

        var init = 500000
        var years = 30
        var compound = 1
        var interest = 3.99
        var period= 2
        var total = 0
        
        
        
        function CInterest(){
            for(let i=0; i<years*12; i++){
             
                if(i%(12/period) === 0){
                    compound*=(1+((interest/100)/period))
                }
            }  
            total= init*compound
            }
        
        
            CInterest()
            console.log("total: ",total)
        

        【讨论】:

          【解决方案6】:

          这是我为复利编写代码的方式

          function call()
              {
                  var A = Principle;
                  var B = Interest;
                  var C = Years;
                  var D = 0;
                  var E = A*B/100;
                  D+=E;
                  var f=E+A;
                  document.write("0 year: Interest "+E+" Principal: "+f);
                  document.write("<br />");
                  for (var i=1; i<C; i++)
                  {
                      E=f*B/100;
                      D+=E;
                      f=E+f;
                      document.write(i+"year: Interest "+E+" Principal:"+f);
                      document.write("<br />");
                  }
          
              return false;
              }
          

          【讨论】:

            猜你喜欢
            • 2020-02-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-09-09
            • 2021-12-16
            • 2018-11-08
            • 1970-01-01
            相关资源
            最近更新 更多