2013-09-10 2 views
0

Редакцией:Комплексная математическая формула функции Jquery не работает

Долговой потолок часть функции фактически будет использоваться на стадии, которую я еще не написал. Он используется для определения того, является ли отношение долга пользователя к доходу слишком высоким, но оно не влияет на результат функции, как она написана сейчас.

У меня все еще есть проблема, и я очень благодарен за понимание. Я думаю, что у меня есть некоторая плохая логика в следующем разделе 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); 

}); 

Еще раз спасибо за помощь!

ORIGINAL:

Это на самом деле расчет ипотеки.

У меня это работает при обычном использовании, то есть для определения ежемесячного платежа, когда пользователь вводит четыре переменные (сумма кредита, первоначальный взнос, процентная ставка и срок).

Но когда я пытаюсь изменить формулу для решения суммы кредита (калькулятор доступности), я получаю плохие результаты.

Вот оригинальная формула, как объясняются Ипотечным профессор:

Следующая формула используется для расчета фиксированного ежемесячного платежа (P), необходимый для полного амортизировать кредит в размере L долларов в течение срока п месяцев с ежемесячной процентной ставкой в. [Если указанная ставка составляет 6%, для примера c - 0,6/12 или .005].

P = L [с (1 + с) п]/[(1 + с) п - 1]

http://www.mtgprofessor.com/formulas.htm

я сначала привести пример, который работает должным образом.

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); 

}); 

Вышеприведенное основанное на рассмотрении формулы и ее перегруппировке.

Оригинал: х = у (а/б)

Решение для у: у = х/(а/б)

Как-то я пошел не так с новой формулой, но я не где и как это исправить.

Благодарим за помощь!

ответ

0

Ваш ежемесячный платеж не рассчитан правильно в коде, который не работает должным образом. Если вы посмотрите на это, вы увидите, что вы не делаете никаких сомнений в своих долгах.

Я не знаю точно, как вы выбираете, чтобы рассчитать ежемесячный платеж, но я думаю, вы должны вычесть свои долги из вашего дохода, а затем сделать свой потолок математику, может быть что-то вроде этого:

var debt_ceiling = (income - debts) * .92; 
var monthly_payment = (debt_ceiling * .28).toFixed(2); 

Или что-то в этом роде ... но в этом есть ваша ошибка.

0

Semi-Решено:

Проблема была с моей формулой и коллеги, и я понял, главная проблема. Когда я преобразовал исходную формулу (которую я здесь не очень подробно описал здесь), я не выполнил правильный алгебраический метод обращения вспять того, что было сделано с одной стороны уравнения на другой стороне. В принципе, бит фракции исходной формулы нужно было перевернуть и умножить. Так вот новая формула, решая для L, а не Р:

L = P [(1 + с)^п -1]/[с (1 + с)^п]

И оригинал с морковью для обозначения "возведенное в степень п": Р = L [с (1 + с)^п]/[(1 + с)^п - 1]

Тем не менее возникли проблемы хотя, что я добавил к моему первоначальному вопросу.

1

новая формула становится L = P/[(1 + с)^п-1]/[с (1 + с)^п]

позвольте мне решить эту проблему для вас. Чтобы добавить L на другую сторону, вам нужно несколько на 1/L. поэтому теперь левая часть уравнения равна P/L. чтобы избавиться от P, вам нужно несколько 1/P. теперь, оставляя только L, делает L равным 1/L. Чтобы избавиться от того, на что вы должны обратить обратное уравнение справа. поэтому вы получите новую формулу выше.