JS中的Excel PMT功能

Hol*_*ian 8 javascript jquery

关于PMT计算,我发现我在互联网上有点snipet.

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); });
Run Code Online (Sandbox Code Playgroud)

当页面加载时,在结果输入框中我看到"NaN",当我显示一些不相关的数字时,出现"-Infinity"msg.我在文件中搜索到"NaN",我在jquery.js中找到了,但是在我修改之后,没有任何改变.我找不到Infinity

我该如何更改此消息?

编辑

致电代码: -

function performCalc() {
  CalculatePMTFromForm('LoanAmount', 'InterestRate', 'Months', 'Payment');
}

jQuery(document).ready(function() {
  performCalc(); jQuery('.calc').keyup(performCalc);
});
Run Code Online (Sandbox Code Playgroud)

这对我有用:

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

Ada*_*dam 34

这个问题已经死了一年多了,但我最近需要做同样的事情.这是我想出的:

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;
}
Run Code Online (Sandbox Code Playgroud)

type需要与Excel相同10相同.该rate_per_period需求是一个小数(如:0.2525%).

一个例子:

/* 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);
Run Code Online (Sandbox Code Playgroud)

示例期间(月份)的付款约为474.60美元.

注意结果的否定,因为金额是一个dedection - 即:花费474美元 - 结果是负值.如果结果是信用,结果将是积极的.一般来说,你会希望将它保持为负面/正面,但如果你以一种格式显示它Total Debt: $XYZ,你需要将其转换为正数.

  • 谢谢一年后的一年后:) (5认同)
  • 谢谢又一年! (2认同)

Pek*_*ica 0

NaN 的意思是“不是数字”。

确保检查每个输入值是否为数字。如果不是,则抛出一条错误消息,或者将其设置为 0,具体取决于它对您的计算是否重要。

检查值是否为数字的最佳方法的一个很好的集合是这个问题: Validate numeric in JavaScript - IsNumeric()