Код не рассчитывает и не показывает никаких результатов. - PullRequest
0 голосов
/ 08 ноября 2019

Я нуб из HTML5 и Jquery. Я построил фрагмент кода для расчета суммы кредита на основе срока и интереса. Но, кажется, не работает сам по себе. Числа не рассчитываются автоматически и остаются на 0. Я ценю любую помощь. Спасибо всем.

Это скрипт для вставки на сайт Wordpress

    <script>
        function pmt(rate_per_period, number_of_payments, present_value, future_value, type){
                if(rate_per_period != 0.0){
                    // Interest rate exists
                    var q = Math.pow(1 + rate_per_period, number_of_payments);
                    return -(rate_per_period * (future_value + (q * present_value))) / ((-1 + q) * (1 + rate_per_period * (type)));

                } else if(number_of_payments != 0.0){
                    // No interest rate, but number of payments exists
                    return -(future_value + present_value) / number_of_payments;
                }
                return 0;
            }


        function calcLoanezi(){

            var interest;
            if ($( "#invoice" ).val() =< 5000) {interest = 0.12}
            else if ($( "#invoice" ).val() >= 5001 && $( "#invoice" ).val() <= 10000) {interest = 0.10}
            else if ($( "#invoice" ).val() >= 10001 && $( "#invoice" ).val() <= 20000) {interest = 0.08}
            else if ($( "#invoice" ).val() >= 20001 && $( "#invoice" ).val() <= 35000) {interest = 0.0725}
            else if ($( "#invoice" ).val() >= 35001 && $( "#invoice" ).val() <= 60000) {interest = 0.0695}              
            else if ($( "#invoice" ).val() >= 60001 && $( "#invoice" ).val() <= 100000) {interest = 0.0675}

            var months;             // Lifetime of loan (in years)
            if ($("#term").val() >=60) {interest = interest+0.01}                   
            present     = $( "#invoice" ).val(),        // Present value  of loan
            future      = 0,        // Future value of loan
            beginning   = 0;        // Calculated at start of each period
            brokerage   = present * 0.06;

            var payment = -pmt((interest / 12), months, (Number(brokerage) + Number(present)), future, beginning);

            var payment_2dp_exgst = payment.toFixed(2);
            var payment_2dp_gst = ((payment*1.1)-payment).toFixed(2);
            var payment_2dp_incgst = (Number(payment_2dp_exgst) + Number(payment_2dp_gst)).toFixed(2);


            $( "#monthlyex" ).val("$"+payment_2dp_exgst);
            $( "#monthlygst" ).val("$"+payment_2dp_gst);
            $( "#monthlyinc" ).val("$"+payment_2dp_incgst);

        }

        $( document ).ready(function() {
        $( "#invoice" ).keyup(function(){
            calcLoanezi();
        });
        $("#term").on('change', function() {
            calcLoanezi();
        });
        });

    </script>

Не показывает никаких результатов

1 Ответ

0 голосов
/ 08 ноября 2019

Фрагмент ниже должен работать (технически, но не без HTML или, по крайней мере, ввода макета). Я дал ему немного больше структуры, проблемы разделены.

Если вы предоставите HTML, то фрагмент кода JS может быть изменен для работы (сейчас вы не увидите никаких результатов, так как HTML-код не прикреплен). ).

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

  • выничего не делать, если значение отрицательное или превышает 100.000

  • , вы объявляете месяцев , но оно не имеет значения (и вы используете его в расчете)

  • Будущее и Начало имеют значение 0 (вы его определили), и эти 0 передаются в расчете,

  • настоящее , будущее , начало и брокерские услуги являются глобальными (они не var, const или let )

При более структурированном подходе к коду вы можете увидеть эти проблемы расчетаэмс.

// calculate interest
function calcInterest(val) {
  const interest = 0

  // you don't need to specify the lower bount of the "else if"s, because you can be sure that it will hit only one of them
  if (0 <= val && val < 5000) {
    interest = 0.12
  } else if (val <= 10000) {
    interest = 0.10
  } else if (val <= 20000) {
    interest = 0.08
  } else if (val <= 35000) {
    interest = 0.0725
  } else if (val <= 60000) {
    interest = 0.0695
  } else if (val <= 60000) {
    interest = 0.0695
  } else if (val <= 100000) {
    interest = 0.0675
  } // you don't have a "default else", so if val is 100001+, or is a negative number, then interest will be 0

  return interest
}

function pmt(rate_per_period, number_of_payments, present_value, future_value, type) {
  if (rate_per_period != 0.0) {
    // Interest rate exists
    var q = Math.pow(1 + rate_per_period, number_of_payments);
    return -(rate_per_period * (future_value + (q * present_value))) / ((-1 + q) * (1 + rate_per_period * (type)));

  } else if (number_of_payments != 0.0) {
    // No interest rate, but number of payments exists
    return -(future_value + present_value) / number_of_payments;
  }
  return 0;
}

// this function gets a lot of parameters
// future and beginning are always 0
function calcPayments(interest, months, brokerage, present, future, beginning) {
  var payment = -pmt((interest / 12), months, (Number(brokerage) + Number(present)), future, beginning)

  var payment_2dp_exgst = payment.toFixed(2);
  var payment_2dp_gst = ((payment * 1.1) - payment).toFixed(2);
  var payment_2dp_incgst = (Number(payment_2dp_exgst) + Number(payment_2dp_gst)).toFixed(2);

  return {
    payment_2dp_exgst,
    payment_2dp_gst,
    payment_2dp_incgst
  }

}

// main function
function calcLoanezi(present, term) {
  const interest = 60 < term ? calcInterest(present) + 0.01 : calcInterest(present)

  let months,
    future = 0,
    beginning = 0,
    brokerage = present * 0.06

  return calcPayments(interest, months, brokerage, present, future, beginning)
}

// DOM manipulation
function appendToDOM() {
  const {
    payment_2dp_exgst,
    payment_2dp_gst,
    payment_2dp_incgst
  } = calcLoanezi(Number($("#invoice").val()), Number($("#term").val()))

  jQuery("#monthlyex").val("$" + payment_2dp_exgst);
  jQuery("#monthlygst").val("$" + payment_2dp_gst);
  jQuery("#monthlyinc").val("$" + payment_2dp_incgst);
}

jQuery(document).ready(function() {
  $("#invoice").keyup(function() {
    appendToDOM();
  });
  $("#term").on('change', function() {
    appendToDOM();
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...