Фрагмент ниже должен работать (технически, но не без 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>