代码不计算或不显示任何结果

问题描述 投票:-1回答:1

我是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>

没有显示任何结果

javascript jquery html
1个回答
0
投票

下面的代码段应该可以工作(从技术上讲,但不是没有HTML,或者至少没有模型输入)。我给了它更多的结构,关注点分离了。

如果提供HTML,则可以修改JS代码段以使其正常工作(现在,由于未附加HTML,因此您将看不到任何结果)。

但是您似乎在计算参数方面有问题,,我认为这些可能是您有问题的结果的根源:

  • [如果值是负数或大于100.000,则不执行任何操作

  • 您声明months,但它没有值(您在计算中使用它)

  • futurebeginning的值为0(由您定义),并且这些0会在计算中传递,

  • present未来开始经纪人是全局的(它们不是varconstlet

使用更结构化的代码方法,您可以看到这些计算问题。

// 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>
© www.soinside.com 2019 - 2024. All rights reserved.