JSFiddle - React, Tailwind, and code Playground

by Eric Abutaliev

HTML

<button id="psk">Посчитать пск!</button>

JavaScript

document.getElementById('psk').onclick = function () {
    //входящие данные - даты платежей
    var dates = [
    new Date(2014, 8, 01),
    new Date(2014, 9, 01),
    new Date(2014, 10, 01),
    new Date(2014, 11, 01)];
    //входящие данные - суммы платежей
    var sum = [-100000,
    34002.21,
    34002.21,
    34002.21 ];
    var m = dates.length; // число платежей

    //Задаем базвый период bp
    bp=30;
    //Считаем число базовых периодов в году:
    var cbp = Math.round(365 / bp);

    //заполним массив с количеством дней с даты выдачи до даты к-го платежа
    var days = [];
    for (k = 0; k < m; k++) {
        days[k] = (dates[k] - dates[0]) / (24 * 60 * 60 * 1000);
    }

    //посчитаем Ек и Qк для каждого платежа
    var e = [];
    var q = [];
    for (k = 0; k < m; k++) {
        e[k] = (days[k] % bp) / bp;
        
        q[k] = Math.floor(days[k] / bp);
        
    }

    //Втупую методом перебора начиная с 0 ищем i до максимального приблежения с шагом s
    var i = 0;
    var x = 1;
    var x_m = 0;
    var s = 0.000001;
    while (x > 0) {
        x_m = x;
        x = 0;
        for (k = 0; k < m; k++) {
            x = x + sum[k] / ((1 + e[k] * i) * Math.pow(1 + i, q[k]));
        }
        i = i + s;
    }
    if (x > x_m) {
        i = i - s;
    }

    //считаем ПСК
    var psk = Math.floor(i * cbp * 100 * 1000) / 1000;

    //выводим ПСК
    alert("ПСК = " + psk + " %");
}