Функция 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, но после того, как я изменил, ничего не изменилось. И я не могу найти бесконечность
Как я могу изменить это сообщение?
- Запустить php-функцию внутри jQuery
- Распространение прекращения загрузки бутстрапа в раскрывающемся списке
- Как динамически вставить iframe в div
- Как предоставить браузеру «сохранить изображение как» для кнопки
- Зачем определять анонимную функцию и передавать ее jQuery в качестве аргумента?
редактировать
Код звонка: –
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));}
- Странное поведение с кнопкой click на кнопке?
- Отображение ответов AJAX в том же порядке, в котором они были отправлены, * без * использования очереди или синхронных запросов?
- Как изменить CSS одного сообщения в блоге, а не других, чтобы иметь 5-звездную рейтинговую систему?
- Как настроить размер нескольких соседних текстовых областей, например, в jsfiddle.net?
- Использование jQuery inArray с массивом объектов JavaScript
- Переместите фокус с одного элемента управления на другой, просто нажав клавишу ввода JQuery
- JQuery Линейная диаграмма флота с месяцем, год по оси x
- Запрос Throttle AJAX на события KeyUp и Paste
Этот вопрос был мертв уже более года, но мне недавно нужно было сделать то же самое. Вот что я придумал:
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 () возвращает тип строки, а не тип номера.