利息计算代码,预期收益计算公式
var sys = {
// 预期收益计算公式
Interest : {
/**
* 按月付息到期还本
*/
interest: function(amount, year_ratio, month) {
var month_ratio = year_ratio / 100 / 12;
var total_interest = amount * month_ratio * month;
return {
total_interest: total_interest.toFixed(2),
total: (amount + total_interest).toFixed(2)
};
},
/**
* 一次性还本付息
*/
bullet_repayment: function(amount, year_ratio, month, days) {
var month_ratio = year_ratio / 100 / 12;
var day_ratio = year_ratio / 100 / 365;
var total_interest = amount * month_ratio * month + amount * day_ratio * days;
return {
total_interest: total_interest.toFixed(2),
total: (amount + total_interest).toFixed(2)
};
},
/**
* 等额本息
*/
equal_installment: function(amount, year_ratio, month) {
var month_ratio = year_ratio / 100 / 12;
var repay_monthly = amount * ((month_ratio * Math.pow(1 + month_ratio, month)) / (Math.pow(1 + month_ratio, month) - 1));
var total_interest = repay_monthly * month - amount;
return {
total_interest: total_interest.toFixed(2),
repay_monthly: repay_monthly.toFixed(2),
total: (amount + total_interest).toFixed(2)
};
},
/**
* 等额本金
*/
equal_principal: function(amount, year_ratio, month) {
var month_ratio = year_ratio / 100 / 12;
var principal_monthly = amount / month;
var total_interest = 0;
var repay_first = principal_monthly;
for(var i = 0; i < month; i++) {
total_interest += ((amount - principal_monthly * i) * month_ratio);
if(i === 0) {
repay_first += total_interest;
}
}
return {
total_interest: total_interest.toFixed(2), // 总利息
repay_first: repay_first, // 首次还款金额
total: (amount + total_interest).toFixed(2) // 本息合计
};
},
calc: function(amount, year_radio, month, days, repayment) {
var result,
othis=this;
if(repayment === 'INTEREST') {
result = sys.Interest.interest(amount, year_radio, month);
} else if(repayment === 'BULLET_REPAYMENT') {
if(month !== 0) {
result = sys.Interest.bullet_repayment(amount, year_radio, month, 0);
} else {
result = sys.Interest.bullet_repayment(amount, year_radio, 0, days);
}
} else if(repayment === 'EQUAL_INSTALLMENT') {
result = sys.Interest.equal_installment(amount, year_radio, month);
} else if(repayment === 'EQUAL_PRINCIPAL') {
result = sys.Interest.equal_principal(amount, year_radio, month);
}
return result;
}
}
}
demo:
sys.Interest.calc(10000,4,1,0,'BULLET_REPAYMENT').total_interest