咨询Wikipedia后,我想出了这个函数,它返回与内置PV相同的结果。通过将其作为自定义函数输入并对其抛出一些随机值进行测试。
function myPV(rate, num, amount, remain, type) {
if (type == 0) {
var factor = (rate == 0 ? num : (1 - Math.pow(1+rate, -num))/rate);
return -amount*factor - remain * Math.pow(1+rate, -num);
}
else {
var factor = (rate == 0 ? num : (1 - Math.pow(1+rate, -num))*(1+rate)/rate);
return -amount*factor - remain * Math.pow(1+rate, -num);
}
}
优化和现代化:
/**
* @param {number} rate - interest rate
* @param {number} num - number of payments
* @param {number} amount - payment amount
* @param {number} remain - final value
* @param {number} type - 0 for end-of-period payments, 1 for start-of-period payments
*/
function myPV(rate, num, amount, remain, type) {
let factor;
if (type == 0) {
factor = (rate == 0 ? num : (1 - Math.pow(1+rate, -num))/rate);
} else {
factor = (rate == 0 ? num : (1 - Math.pow(1+rate, -num))*(1+rate)/rate);
}
return -amount*factor - remain * Math.pow(1+rate, -num);
}