Функция Excel PMT в JS

Я обнаружил, что у меня немного снайперов в интернете, по расчету PMT.

function PMT(i, n, p) { return i * p * Math.pow((1 + i), n) / (1 - Math.pow((1 + i), n)); } function CalculatePMTFromForm(idLoanAmount, idAnnualInterestRate, idMonths, idResult) { var i = jQuery('#' + idAnnualInterestRate).val() / 1200; var n = jQuery('#' + idMonths).val(); var p = jQuery('#' + idLoanAmount).val(); var pmt = PMT(i, n, -p); jQuery('#' + idResult).val(pmt.toFixed(2)); } function performCalc() { CalculatePMTFromForm('LoanAmount', 'InterestRate', 'Months', 'Payment'); } jQuery(document).ready(function() { performCalc(); jQuery('.calc').keyup(performCalc); }); 

Когда страница загружается, в поле ввода результата я вижу «NaN», и когда я хочу изменить какое-то нерелевантное число, появится сообщение «-Infinity». Я ищу «NaN» в файлах, и я нашел в jquery.js, но после того, как я изменил, ничего не изменилось. И я не могу найти бесконечность

Как я могу изменить это сообщение?

редактировать

Код звонка: –

 function performCalc() { CalculatePMTFromForm('LoanAmount', 'InterestRate', 'Months', 'Payment'); } jQuery(document).ready(function() { performCalc(); jQuery('.calc').keyup(performCalc); }); 

Это сработало для меня:

 if(pmt>0 && pmt<Number.MAX_VALUE) {jQuery('#' + idResult).val(pmt.toFixed(2));} 

Этот вопрос был мертв уже более года, но мне недавно нужно было сделать то же самое. Вот что я придумал:

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

type должен быть 1 или 0 , то же, что и Excel. Значение rate_per_period должно быть десятичным (например: 0.25 , а не 25% ).

Пример:

 /* Example: */ var interest = 0.07, // Annual interest years = 5, // Lifetime of loan (in years) present = 10000, // Present value of loan future = 20000, // Future value of loan beginning = 1; // Calculated at start of each period var payment = -pmt(interest / 12, // Annual interest into months years * 12, // Total months for life of loan present, future, beginning); 

И оплата за примерный период (месяц) составляет ~ 474,60 доллара США.

Обратите внимание на отрицание результата, так как сумма является выводом – то есть: стоит вам $ 474 – результат отрицательный. Если бы результат был кредитом, результат был бы положительным. Как правило, вы хотите сохранить его как отрицательный / положительный, но если вы показываете его в формате Total Debt: $XYZ , вы хотите преобразовать его в положительное.

NaN означает «Не номер».

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

Хорошая коллекция лучших способов проверить значение для того, является ли это числовым: этот вопрос SO: Проверить номера в JavaScript – IsNumeric ()

Попробуй вот так:

 function CalculatePMTFromForm(idLoanAmount, idAnnualInterestRate, idMonths, idResult) { var i = parseFloat($('#' + idAnnualInterestRate).val()) / 1200; var n = parseFloat($('#' + idMonths).val()); var p = parseFloat($('#' + idLoanAmount).val()); var pmt = PMT(i, n, -p); $('#' + idResult).val(pmt.toFixed(2)); } 

Вероятно, .val () возвращает тип строки, а не тип номера.

  • Как разрешить ввод только определенных символов с помощью jQuery?
  • Почему setInterval делает бесконечные циклы
  • Как сохранить фильтры поиска в jqGrid при перезагрузке страницы?
  • Как перенаправить метод «POST» с помощью Javascript?
  • Перезапустить страницу с помощью html anchors (#) - HTML и JS
  • Сдвиньте анимацию с дисплея: none для отображения: block?
  • Как преобразовать строку JSON в объект JavaScript в jQuery?
  • Добавьте дни до времени, используя javascript
  • Есть ли способ дросселировать производительность javascript для имитации медленного клиента
  • Как использовать KnockoutJS для добавления пейджинга на стороне клиента в таблицу?
  • Jquery отложен - «всегда» вызывается при первом отказе
  • Давайте будем гением компьютера.