【问题标题】:How to calculate Future Value (FV) using JavaScript如何使用 JavaScript 计算未来价值 (FV)
【发布时间】:2009-11-23 01:06:49
【问题描述】:

我的任务是将简单的电子表格转换为 HTML 表单以在网站上使用,该表单将使用 JavaScript 进行一些计算。这完全没有问题,除非我对财务功能一无所知,而且我遇到了 FV(未来价值)。

这是电子表格:

B3 = 100
B4 = 10
B5 = B4*12
B6 = 12
B7 = 3
B8 = (1+B6)^(1/12)-1
B9 = ABS(FV(B8,B5,B3/(1+B7),,1)) // and here lies the problem

这是 OO.org 的帮助对 FV 的评价:

根据定期、恒定的付款和恒定的利率(Future Value)返回投资的未来价值。

语法:FV(Rate; Num_periods; Payment; PV (optional); Type)

问题是:如何使用上述参数计算 FV?

示例值:

B3 = 100          1        1        2
B4 = 10           1        2        2
B9 = 21,751.06    12.39    26.28    52.55

【问题讨论】:

    标签: javascript finance


    【解决方案1】:

    这是 Javascript 中 Excel 的准确 FV 公式。它也适用于 0% 的利息

    function FV(rate, nper, pmt, pv, type) {
      var pow = Math.pow(1 + rate, nper),
         fv;
      if (rate) {
       fv = (pmt*(1+rate*type)*(1-pow)/rate)-pv*pow;
      } else {
       fv = -1 * (pv + pmt * nper);
      }
      return fv.toFixed(2);
    }
    

    【讨论】:

    • 这个函数模仿了Excel自带的FV函数,但它的功能非常有限。 Excel TVM 函数(包括 FV)不允许进行更复杂的财务计算。例如,存款是每月 100 美元,为期 5 年,但利息每季度复利一次。 Excel FV 函数无法计算此年金的未来价值,即每季度赚取 60 个月存款。
    • 很高兴知道。你能把它修改成你想要的样子吗?
    • TVM 功能比 Excel、iWork Numbers、OO Calc 和其他电子表格程序和财务计算器提供的功能要多得多。要修改这些函数,必须替换这 5 个 TVM 函数所基于的现有 TVM 方程,并用两个不同的 TVM 方程替换它,这将允许年金支付随着年金的增长、缩小、增加和减少。实际代码需要引入一个名为 GRADIENT 的新函数和其他辅助函数来完成工作。 tadXL 插件提供了所有这些,但现在已经消失了
    【解决方案2】:

    未来价值只是本金加上未偿还期间的所有应计利息。

    在您的示例中,本金为 100 (B3),时间为 10 年(120 个月 -- B5),利率为 B8。您确定 B6 不等于 0.12 或 12%?这将是 12% 的年利率,或每月大约 1%(产生 12% 年利率的月利率的实际公式是 1.12 ^ (1/12) - 1)。

    未来价值只是本金乘以(1 + 利率)^ 时间,或者在这种情况下,大约是 100*(1.01)^120。

    【讨论】:

      【解决方案3】:

      这里是a calculator,你可以参考一下。

      去Javascript源码,可以发现计算未来值的公式是这样的:

      function checkNumber(input, min, max, msg)
      
      {
      
          msg = msg + " field has invalid data: " + input.value;
      
      
      
          var str = input.value;
      
          for (var i = 0; i < str.length; i++) {
      
              var ch = str.substring(i, i + 1)
      
              if ((ch < "0" || "9" < ch) && ch != '.') {
      
                  alert(msg);
      
                  return false;
      
              }
      
          }
      
          var num = 0 + str
      
          if (num < min || max < num) {
      
              alert(msg + " not in range [" + min + ".." + max + "]");
      
              return false;
      
          }
      
          input.value = str;
      
          return true;
      
      }
      
      
      
      function computeField(input)
      
      {
      
          if (input.value != null && input.value.length != 0)
      
              input.value = "" + eval(input.value);
      
          computeForm(input.form);
      
      }
      
      
      
      function computeForm(form)
      
      {
      
          if ((form.payments.value == null || form.payments.value.length == 0) ||
      
              (form.interest.value == null || form.interest.value.length == 0) ||
      
              (form.principal.value == null || form.principal.value.length == 0)) {
      
              return;
      
          }
      
      
      
          if (!checkNumber(form.payments, 1, 480, "# of payments") ||
      
              !checkNumber(form.interest, .001, 99, "Interest") ||
      
              !checkNumber(form.principal, 1, 10000000, "Principal")) {
      
              form.fv.value = "Invalid";
      
              return;
      
          }
      
      
      
          var i = form.interest.value;
      
          if (i > 1.0) {
      
              i = i / 100.0;
      
              form.interest.value = i;
      
          }
      
          i /= 12;
      
      
         var pow = form.principal.value;
      
          for (var j = 0; j < form.payments.value *12; j++)
      
              pow = (pow * i) + (pow *1);
      
          form.fv.value = pow
      
              form.totalint.value = (form.fv.value - form.principal.value)
      
      }
      

      【讨论】:

        【解决方案4】:

        您将很难将 Excel 迁移到网络。
        相反,您最好考虑使用 Google 文档。

        但如果您只需要这个特定的电子表格,那么 this page 会解释公式。
        此外,您可以在Compound Interest Wiki page 上找到信息。

        【讨论】:

        • +1 用于忘记 Javascript 并改用 Google Apps。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-02-25
        • 1970-01-01
        • 2021-12-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多