Как написать ипотечный калькулятор на javascript?
При разработке сайта строительной компании часто возникает необходимость помимо выбора квартиры дать возможность клиенту воспользоваться ипотечным или кредитным калькулятором. С помощью него чаще всего предлагается посчитать один из двух вариантов:
- Сколько времени клиенту придётся выплачивать ипотечный кредит при известных стоимости квартиры и ежемесячном платеже?
- Сколько составит ежемесячный платёж при известных стоимости квартиры и сроке кредита?
В статье мы рассмотрим, как на 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-файл с формулами проверок.
Готовый пример можно посмотреть по ссылке на демо.
Добавить комментарий