У меня есть массив чисел [350000, 350000, 350000]

У меня есть следующий код:

function getNPV(rate, periods, Cashflow) {
    var npv = 0;
    for (var i = 0; i < Cashflow.length; i++) {
        npv += Cashflow[i] / Math.pow(1 + rate, periods);
    }
    return npv;
}

Здесь денежный поток - это наш массив, ставка = 6% и период = 91 день.

Когда я беру:

 npv = Cashflow[i] / Math.pow(1 + rate, periods);

Результатом будет [348328,346664,344952], когда ставка дисконтирования 6% применяется к 350000 каждый раз.

Я пытаюсь вычислить сумму [348328,346664,344952], которая равна $1,039,944 Но в результате он дает мне $1034856.

Попробовав консоль, на самом деле она взяла сумму 3-го значения 3 раза. [344952 + 344952 + 344952] почему-то.

Может кто-нибудь подскажите, как исправить эту ошибку. Любая помощь приветствуется. Спасибо.

CODE

Logic

0
ace23 8 Окт 2018 в 19:32

2 ответа

Лучший ответ

Поскольку я говорю о вашей электронной таблице, вам нужен массив для периода, а не для денежного потока.

Проходят периоды и денежный поток как:

var periods = [30, 60, 91];
var cashflow = 350000;
getNPV(rate, periods, cashflow);

Ваш денежный поток такой же, поэтому массив не нужен (у вас все еще может быть массив, если вы хотите изменить денежный поток)

И используйте его в цикле:

function getNPV(rate, periods, Cashflow) {
    var npv = rate;

    for (var i = 0; i < periods.length; i++) {
        npv += Cashflow / Math.pow(1 + rate, periods[i]);
    }
    return npv;
}
0
Aragorn 8 Окт 2018 в 16:43

Вы можете использовать returnSum, чтобы получить сумму массива

function returnSum(arr) {

  function sum(a, b) {
    return a + b;
  }
  return arr.reduce(sum, 0);
}

let array = [348328,346664,344952]

returnSum(array); //result 1039944
0
Lenny86 8 Окт 2018 в 16:51