Главная » Frontend » Как написать ипотечный калькулятор на javascript?

Как написать ипотечный калькулятор на javascript?

При разработке сайта строительной компании часто возникает необходимость помимо выбора квартиры дать возможность клиенту воспользоваться ипотечным или кредитным калькулятором. С помощью него чаще всего предлагается посчитать один из двух вариантов:

  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-файл с формулами проверок.

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

Понравилась статья? — Ставь лайк!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

×
Новости и обзор новинок рынка строительной техники.
Подпишитесь на обновления нашей группы!