// Получить ввод пользователя из элементов ввода. Предполагается, что все данные
// являются корректными. Преобразовать процентную ставку из процентов
// в десятичное число и преобразовать годовую ставку в месячную ставку.
// Преобразовать период платежей в годах в количество месячных платежей.
var principal = parseFloat(amount.value);
var interest = parseFloat(apr.value) / 100 / 12;
var payments = parseFloat(years.value) * 12;
// Теперь вычислить сумму ежемесячного платежа.
var х = Math.pow(1 + interest, payments); // Math.pow() вычисляет степень
var monthly = (principal * x * interest)/(x-1);
// Если результатом является конечное число, следовательно, пользователь
// указал корректные данные и результаты можно отобразить
if (isFinite(monthly)) {
// Заполнить поля вывода, округлив результаты до 2 десятичных знаков
payment.innerHTML = monthly.toFixed(2);
total.innerHTML = (monthly * payments).toFixed(2);
totalinterest.innerHTML = ((monthly*payments)-principal).toFixed(2);
// Сохранить ввод пользователя, чтобы можно было восстановить данные
// при следующем открытии страницы
save(amount.value, apr.value, years.value, zipcode.value);
// Реклама: отыскать и отобразить ссылки на сайты местных
// кредитных учреждений, но игнорировать сетевые ошибки
try { // Перехватывать все ошибки, возникающие в этих фигурных скобках
getLenders(amount.value, apr.value, years.value, zipcode.value);
}
catch(e) { /* И игнорировать эти ошибки */ }
// В заключение вывести график изменения остатка по кредиту, а также
// графики сумм, выплачиваемых в погашение кредита и по процентам
chart(principal, interest, monthly, payments);
}
else {
// Результат не является числом или имеет бесконечное значение,
// что означает, что были получены неполные или некорректные данные.
// Очистить все результаты, выведенные ранее,
payment.innerHTML = "";
// Стереть содержимое этих элементов total.innerHTML = totalinterest.innerHTML = "";
chart(); // При вызове без аргументов очищает диаграмму
}
}