ИЗМЕНЕНО:
Часть функции, связанная с потолком долга, фактически будет использоваться на этапе, о котором я еще не писал. Он используется, чтобы определить, не слишком ли велико отношение долга к доходу пользователя, но не влияет на результат функции, как она написана сейчас.
Однако у меня все еще есть проблема, и я был бы очень признателен за любую информацию. Я думаю, что у меня плохая логика в следующем разделе javasctipt. Вот моя новая функция:
$(function(){
function calculate_affordability() {
var income = parseFloat($('#income').val());
var debts = parseFloat($('#debts').val());
var apr_decimal = parseFloat($('#apr').val()) / 100;
var monthly_interest = apr_decimal / 12;
var down = parseFloat($('#down').val());
var term = parseFloat($('#term').val()) * 12;
var debts_ceiling = (debts * .08).toFixed(2);
var mortgage_ceiling = (income * .28).toFixed(2);
var formula_numerator = Math.pow((1 + monthly_interest), term) -1;
var formula_denominator = monthly_interest * Math.pow((1 + monthly_interest), term);
var formula_result = (formula_numerator / formula_denominator);
var loan_amount = (mortgage_ceiling * formula_result).toFixed(2);
// the issue is in here somewhere:
var closing_costs = (loan_amount * .03).toFixed(2);
var actual_down = (down - closing_costs);
var max_purchase_price = (loan_amount + actual_down);
$('#monthly-payment').html('$' + mortgage_ceiling);
$('#loan-amount').html('$' + loan_amount);
$('#max-purchase-price').html('$' + max_purchase_price);
$('#actual-down').html('$' + actual_down);
$('#closing-costs').html('$' + closing_costs);
}
$('#term').keyup(calculate_affordability);
$('#term').mouseup(calculate_affordability);
});
Спасибо еще раз за помощь!
ОРИГИНАЛ:
Фактически это расчет ипотеки.
У меня он работает при обычном использовании, то есть для определения ежемесячного платежа, когда пользователь вводит четыре переменные (сумма ссуды, первоначальный взнос, процентная ставка и срок действия).
Но когда я пытаюсь изменить формулу для определения суммы ссуды (калькулятор доступности), я получаю плохие результаты.
Вот оригинальная формула, которую объяснил профессор ипотечного кредитования:
Следующая формула используется для расчета фиксированного ежемесячного платежа (P), необходимого для полной амортизации ссуды в размере L долларов в течение n месяцев с ежемесячной процентной ставкой c. [Если указанная ставка составляет 6%, например, c составляет 0,06 / 12 или 0,005].
P = L[c(1 + c)n]/[(1 + c)n - 1]
Сначала я приведу пример, который работает правильно.
HTML:
<form>
<div class="col-md-4">
<h4>Home Price</h4>
<input type="text" id="price">
<h4>Down Payment</h4>
<input type="text" id="down">
</div>
<div class="col-md-4">
<h4>Rate (%)</h4>
<input type="text" id="apr">
<h4>Term (Years)</h4>
<input type="text" id="term">
</div>
<div class="col-md-4">
Your Monthly Payment:
<div id="payment"></div>
</div>
</form>
jQuery:
$(function(){
function calculate_monthly_payment() {
var price = parseFloat($('#price').val());
var down = parseFloat($('#down').val());
var apr_decimal = parseFloat($('#apr').val()) / 100;
var monthly_interest = apr_decimal / 12;
var term = parseFloat($('#term').val()) * 12;
var loan_amount = parseFloat(price - down);
var formula_numerator = monthly_interest * Math.pow((1 + monthly_interest), term);
var formula_denominator = Math.pow((1 + monthly_interest), term) -1;
var monthly_payment = parseFloat(loan_amount * (formula_numerator / formula_denominator)).toFixed(2);
if (!isNaN(monthly_payment)) {
$('#payment').html('$' + monthly_payment);
} else {
$('#payment').html('Calculating...');
}
}
$('#price').keyup(calculate_monthly_payment);
$('#down').keyup(calculate_monthly_payment);
$('#apr').keyup(calculate_monthly_payment);
$('#term').keyup(calculate_monthly_payment);
$('#price').mouseup(calculate_monthly_payment);
$('#down').mouseup(calculate_monthly_payment);
$('#apr').mouseup(calculate_monthly_payment);
$('#term').mouseup(calculate_monthly_payment);
});
Часть, которая не работает должным образом:
HTML:
<form>
<div class="col-md-6">
<h4>Income (Monthly)</h4>
<input type="text" id="income">
<h4>Debts (Monthly, not including housing costs)</h4>
<input type="text" id="debts">
<h4>Down Payment</h4>
<input type="text" id="down">
<h4>Rate (%)</h4>
<input type="text" id="apr">
<h4>Term (Years)</h4>
<input type="text" id="term">
</div>
<div class="col-md-6">
Monthly Payment:
<div id="monthly-payment"></div>
Loan Amount:
<div id="loan-amount"></div>
Purchase Price:
<div id="purchase-price"></div>
Down Payment:
<div id="actual-down"></div>
Closing Costs:
<div id="closing-costs"></div>
</div>
</form>
jQuery:
$(function(){
function calculate_affordability() {
var income = parseFloat($('#income').val());
var debts = parseFloat($('#debts').val());
var down = parseFloat($('#down').val());
var apr_decimal = parseFloat($('#apr').val()) / 100;
var monthly_interest = apr_decimal / 12;
var term = parseFloat($('#term').val());
var debt_ceiling = income * .08;
var monthly_payment = (income * .28).toFixed(2);
var formula_numerator = monthly_interest * Math.pow((1 + monthly_interest), term);
var formula_denominator = Math.pow((1 + monthly_interest), term) -1;
var loan_amount = parseFloat(monthly_payment / (formula_numerator / formula_denominator)).toFixed(2);
var closing_costs = (loan_amount * .03).toFixed(2);
var actual_down = (down - closing_costs).toFixed(2);
var purchase_price = (loan_amount - actual_down).toFixed(2);
$('#monthly-payment').html('$' + monthly_payment);
$('#loan-amount').html('$' + loan_amount);
$('#purchase-price').html('$' + purchase_price);
$('#actual-down').html('$' + actual_down);
$('#closing-costs').html('$' + closing_costs);
}
$('#term').keyup(calculate_affordability);
$('#term').mouseup(calculate_affordability);
});
Вышесказанное основано на просмотре формулы и ее перестановке.
Исходный: x = y (a / b)
Решение относительно y: y = x / (a / b)
Как-то я ошибся с новой формулой, но не знаю, где и как ее исправить.
Спасибо за любую помощь!