Преобразование расчета будущей стоимости сложного процентного калькулятора в JavaScript - PullRequest
0 голосов
/ 30 октября 2019

В настоящее время я пытаюсь преобразовать уравнение в листах Google в Javascript, но получаю разные результаты.

Я пытаюсь повторить следующую формулу из здесь :

Исходное уравнение:

F = P*(1+rate)^nper + A*( ((1+rate)^nper - 1)/rate )

Это то, что у меня сейчас есть: (В моем текущем фрагменте кода ниже имена переменных разные)

v = ((p*(Math.pow((1+rate),nper))) + (A*(Math.pow((1+rate),nper - 1))/rate));


Дополнительная информация с исходного сайта:
r = номинальная годовая процентная ставка (десятичная дробь)
n = количество периодов начисления процентов в год
p = число периодов платежей в год
ставка = ставка за период платежей
nper = общее количество периодов платежей
A = сумма, добавляемая к основной сумме в конце каждого платежного периода

rate = ((1 + r / n) ^ (n / p)) - 1
nper= p * t
Общая сумма платежей = A * nper
Общая сумма процентов = F - P - Общая сумма платежей


Полный контекст (My Vue Code):


        var app = new Vue({
          el: '#app',
          data: {
            principal: 0,
            interest_rate: 0,
            time_invested: 0,
            additional_investment: 0,
            additional_investment_frequency : 1,
            options: {
                additional_investment_frequency: {
                "1": "Yearly",
                "12": "Monthly",
                "26": "Fortnightly",
                "52": "Weekly",
                "365": "Daily"
                }
            },
            compound_frequency : 1,
            options: {
                compound_frequency: {
                "1": "Yearly",
                "12": "Monthly"
                }
            }
          },
          methods:{
        },
          computed: {
            total_pay_periods: function () {
                // calculate total number of pay periods
                total_pay_periods = parseFloat(this.additional_investment_frequency) * parseFloat(this.time_invested);
                return parseFloat(this.additional_investment_frequency) * parseFloat(this.time_invested);
            },
            total_additional_investment: function () {
                // calculate total number of pay periods
                total_pay_periods = parseFloat(this.additional_investment_frequency) * parseFloat(this.time_invested);
                // times total pay periods by additional investment installment amount to get overall total additional investment
                return parseFloat(this.additional_investment) *  total_pay_periods;
            },
            rate: function () {
                ir = parseFloat(this.interest_rate) / 100;
                cf = parseFloat(this.compound_frequency);
                aif = parseFloat(this.additional_investment_frequency);
                return (Math.pow((1+ir/cf),(cf/aif))-1);
                // return (((1+ir/cf)^(cf/aif))-1);
            },
            future_value: function () {
                p = parseFloat(this.principal);
                r = parseFloat(this.rate);
                tpp = parseFloat(this.total_pay_periods);
                ai = parseFloat(this.additional_investment);

                // F = P*(1+rate)^nper + A*( ((1+rate)^nper - 1)/rate )
                // https://www.vertex42.com/Calculators/compound-interest-calculator.html#rate-per-period

                // calculate final future value
                v = ((p*(Math.pow((1+r),tpp))) + (ai*(Math.pow((1+r),tpp - 1))/r));
                // convert to 2 decimal places
                return  v.toFixed(2);
            }
          }
        })

1 Ответ

1 голос
/ 30 октября 2019

Во втором семестре есть ошибка (A*(Math.pow((1+rate),nper - 1))/rate)); -1 переходит к функции power. Правильный путь будет (A*(Math.pow((1+rate),nper) - 1)/rate));

...