Пара тапок » ипотека http://paratapok.ru Блог о веб-разработке Sun, 18 Dec 2022 12:14:48 +0000 ru-RU hourly 1 https://wordpress.org/?v=4.3.33 Как написать ипотечный калькулятор на javascript? http://paratapok.ru/frontend/2687_kak-napisat-ipotechnyj-kalkulyator-na-javascript/ http://paratapok.ru/frontend/2687_kak-napisat-ipotechnyj-kalkulyator-na-javascript/#comments Sat, 13 Jan 2018 10:34:32 +0000 http://paratapok.ru/?p=2687 Читать далее →]]> При разработке сайта строительной компании часто возникает необходимость помимо выбора квартиры дать возможность клиенту воспользоваться ипотечным или кредитным калькулятором. С помощью него чаще всего предлагается посчитать один из двух вариантов:

  1. Сколько времени клиенту придётся выплачивать ипотечный кредит при известных стоимости квартиры и ежемесячном платеже?
  2. Сколько составит ежемесячный платёж при известных стоимости квартиры и сроке кредита?

В статье мы рассмотрим, как на javascript написать такой калькулятор, но сначала рассмотрим формулы, по которым всё и рассчитывается.

В последнее время банки рассчитывают ипотеку по аннуитетной схеме погашения. Такой схемой пользуются, например, Сбербанк, ВТБ24 и другие крупные банки. Дифференцированная схема встречается редко, поэтому её рассматривать в рамках этой статьи не будем.

Если рассматривать понятие аннуитетных платежей, то можно охарактеризовать такую схему погашения так: ежемесячно заемщик вносит одинаковую сумму денег, одна часть идёт на погашения задолженности перед банком, а вторая часть — в качестве оплаты процентов за использование кредитных средств банка.

Ежемесячный платёж

Ежемесячный платёж вычисляется по следующей формуле:

Формула вычисления аннуитетного платежа

Формула вычисления аннуитетного платежа

В формуле приняты следующие обозначения: P – ежемесячный платеж, S – сумма кредита, i – процентная ставка в месяц, n – срок кредита в месяцах.

На основе формулы не составит труда написать js-функцию, которая принимает на вход три аргумента — сумму, период и ставку.

/**
 * Вычисляет ежемесячный платёж по сроку ипотеки
 *
 * @param {float} sum - сумма кредита
 * @param {integer} period - срок в годах
 * @param {float} rate - годовая ставка в процентах
 * @return {integer} или Nan
 */
function getPayment(sum, period, rate) {
    var i,
        koef,
        result;

    // ставка в месяц
    i = (rate / 12) / 100;

    // коэффициент аннуитета
    koef = (i * (Math.pow(1 + i, period * 12))) / (Math.pow(1 + i, period * 12) - 1);

    // итог
    result = sum * koef;

    // округлим до целых
    return result.toFixed();
};

Стоит отметить, что при очень больших значениях периода функция возвращает Nan, поэтому следует ограничивать входные данные. Чаще всего банки не дают ипотеку более чем на 30 лет, а с такими значениями функция справляется хорошо.

Срок

Используя пару правил математики из школьного курса выразим из вышеприведенной формулы срок кредита n:

Формула периода погашения при аннуитетном платеже

Формула периода погашения при аннуитетном платеже

Обозначения в формуле те же самые, что были приняты выше.

При написании функции для расчёта срока следует принять во внимание, что в стандартной библиотеке Math присутствует лишь функция вычисления натурального логарифма Math.log. Поэтому необходимо написать ещё и весьма тривиальную функцию для нахождения логарифма по произвольному основанию.

/**
 * Вычисление логарифма с произвольным основанием
 * @param {float} x - основание логарифма
 * @param {float} y - число, от которого требуется найти логарифм
 * @return {float}
 */
function getBaseLog(x, y) {
    return Math.log(y) / Math.log(x);
};

Итак, получим:

/**
 * Вычисляет период выплаты ипотеки по ежемесячному платежу
 *
 * @param {float} sum - сумма кредита
 * @param {float} plat - ежемясячный платеж
 * @param {float} rate - годовая ставка в процентах
 * @return {integer} или Nan
 */
function getPeriod(sum, plat, rate) {
    var mm,
        i,
        result;

    // ставка в месяц
    i = (rate / 12) / 100;

    mm = plat / sum;
    result = getBaseLog(1 + i, -mm / (i - mm));

    // округлим до целых
    return Math.ceil(+result);
};

Для проверки правильности подсчётов лучше всего использовать стандартные функции ПЛТ и КПЕР в Excel — скачать xlsx-файл с формулами проверок.

Готовый пример можно посмотреть по ссылке на демо.

]]>
http://paratapok.ru/frontend/2687_kak-napisat-ipotechnyj-kalkulyator-na-javascript/feed/ 0