如何使用JavaScript计算未来价值(FV)

如何使用JavaScript计算未来价值(FV),javascript,finance,Javascript,Finance,我被指派了一项任务,将一个简单的电子表格转换成一个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的说明:

我被指派了一项任务,将一个简单的电子表格转换成一个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的说明:

基于定期、固定付款和固定利率的未来价值返回投资的未来价值

语法:FVRate;周期数;付款PV可选;类型

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

样本值:

B3 = 100          1        1        2
B4 = 10           1        2        2
B9 = 21,751.06    12.39    26.28    52.55
这是你可以参考的

转到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)

}
这是你可以参考的

转到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)

}

您将很难将Excel移动到web。 相反,你最好考虑使用谷歌文档。 但是,如果您只需要这一张特殊的spreedsheet,那么请解释公式。
此外,您还可以在上找到信息。

您将很难将Excel移动到web。 相反,你最好考虑使用谷歌文档。 但是,如果您只需要这一张特殊的spreedsheet,那么请解释公式。
此外,您可以在上找到信息。

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

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


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

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

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


未来值只是本金乘以1+利率^时间,或者在本例中约为100*1.01^120。

这是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);
}

这是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);
}

+1表示忘记Javascript而改用谷歌应用程序。+1表示忘记Javascript而改用谷歌应用程序。此函数模仿Excel自身FV函数的功能,但其功能相当有限。Excel TVM函数(包括FV)不允许进行更复杂的财务计算。例如,5年内每月存款金额为100美元,但利息按季度复利。Excel FV函数无法计算该年金的未来价值,该年金每季度赚取利息时,每月存款60元。很高兴知道这一点。你能修改它并使其符合你想要的方式吗?TVM函数比Excel、iWork数字、OO Calc和其他电子表格程序和金融计算器提供的功能多得多。为了修改这些函数,必须将这5个TVM函数所基于的现有TVM方程替换为两个不同的TVM方程,这两个方程将允许年金的增长、收缩、增加和减少。实际的代码需要引入一个名为GRADIENT的新函数和其他辅助函数来完成这项工作。tadXL插件提供了所有这些功能,但它现在已经不存在了。该功能模仿Excel自己的FV功能,但它的功能非常有限。Excel TVM函数(包括FV)不允许进行更复杂的财务计算。例如,5年内每月存款金额为100美元,但利息按季度复利。Excel FV函数无法计算该年金的未来价值,该年金每季度赚取利息时,每月存款60元。很高兴知道这一点。你能修改它并使其符合你想要的方式吗?TVM函数比Excel、iWork数字、OO Calc和其他电子表格程序和金融计算器提供的功能多得多。为了修改这些函数,必须将这5个TVM函数所基于的现有TVM方程替换为两个不同的TVM方程,这两个方程将允许年金的增长、收缩、增加和减少。实际情况 这方面的l代码需要引入一个称为梯度的新函数和其他辅助函数来完成这项工作。tadXL插件提供了所有这些功能,但现在已经不复存在了