贷款相关内容请参考 等额本金与等额本息
等额本息:每个月的还款金额相同
等额本息法最重要的一个特点是每月的还款额相同,从本质上来说是本金所占比例逐月递增,利息所占比例逐月递减,月还款数不变,即在月供“本金与利息”的分配比例中,前半段时期所还的利息比例大、本金比例小,还款期限过半后逐步转为本金比例大、利息比例小,其计算公式为:
每月还本付息金额 =[ 本金 x 月利率 x(1+月利率)贷款月数 ] / [(1+月利率)还款月数 - 1]
每月利息 = 剩余本金x贷款月利率
还款总利息=贷款额贷款月数月利率*(1+月利率)贷款月数/【(1+月利率)还款月数 - 1】-贷款额
还款总额=还款月数贷款额月利率*(1+月利率)贷款月数/【(1+月利率)还款月数 - 1】
等额本金:每个月还本金相同,但每月还款金额不同
等额本金法最大的特点是每月的还款额不同,呈现逐月递减的状态;它是将贷款本金按还款的总月数均分,再加上上期剩余本金的利息,这样就形成月还款额,所以等额本金法第一个月的还款额最多 ,然后逐月减少,越还越少,计算公式为:
每月还本付息金额=(本金/还款月数)+(本金-累计已还本金)×月利率
每月本金=总本金/还款月数
每月利息=(本金-累计已还本金)×月利率
还款总利息=(还款月数+1)贷款额月利率/2
还款总额=(还款月数+1)贷款额月利率/2+贷款额
注意:在等额本金法中,人们每月归还的本金额始终不变,利息随剩余本金的减少而减少,因而其每月还款额逐渐减少。
主要参数:
private double loanMoney; //贷款金额
private int years; //贷款年限
private double yIns; //年利率
private double totalMoney; //还款金额(本金+利息)
private double totalInterests; //利息总额
private double detail[][]; //每月还款详情
对外接口
//等额本息
public void EqualPrincipalandInterestMethod() {
double mIns = yIns / 100 / 12; //月利率
int months = (years * 12); //还款所需月份
double pow = Math.pow(1 + mIns,months);
double remains = loanMoney;
totalMoney = (months * loanMoney * mIns * pow) / (pow - 1); //总还款金额
totalMoney = Math.floor(totalMoney * 100 + 0.5) / 100; //floor函数 保留两位小数
totalInterests = totalMoney - loanMoney;
totalInterests = Math.floor(totalInterests * 100 + 0.5) / 100;
double temp[][] = new double[months][3];
for (int i = 0; i < months; i++) {
if(i == months - 1) {
temp[i][1] = remains * mIns;
temp[i][1] = Math.floor(temp[i][1] * 100 + 0.5) / 100;
temp[i][0] = remains;
temp[i][0] = Math.floor(temp[i][0] * 100 + 0.5) / 100;
temp[i][2] = temp[i][0] + temp[i][1];
temp[i][2] = Math.floor(temp[i][2] * 100 + 0.5) / 100;
break;
}
//由于精度问题 最后一个月实际的本金会有差别 需要单独计算
temp[i][1] = remains * mIns;
temp[i][1] = Math.floor(temp[i][1] * 100 + 0.5) / 100;
temp[i][2] = totalMoney / months;
temp[i][2] = Math.floor(temp[i][2] * 100 + 0.5) / 100;
temp[i][0] = temp[i][2] - temp[i][1];
temp[i][0] = Math.floor(temp[i][0] * 100 + 0.5) / 100;
remains -= temp[i][0];
}
//temp[][0]为每月还款本金 temp[][1]为每月还款利息 temp[][2]为每月还款总额
detail = temp;
}
//等额本金
public void EqualPrincipalMethod() {
double mIns = yIns / 100 / 12; //月利率
int months = (years * 12);
double remains = loanMoney;
double sum = 0; // 总计还款金额
double temp[][] = new double[months][3];
for (int i = 0; i < months; i++)
{
temp[i][0] = loanMoney / months;
temp[i][0] = Math.floor(temp[i][0] * 100 + 0.5) / 100;
temp[i][1] = remains * mIns;
temp[i][1] = Math.floor(temp[i][1] * 100 + 0.5) / 100;
remains -= temp[i][0];
temp[i][2] = temp[i][0] + temp[i][1];
temp[i][2] = Math.floor(temp[i][2] * 100 + 0.5) / 100;
sum += temp[i][2];
}
//temp[][0]为每月还款本金 temp[][1]为每月还款利息 temp[][2]为每月还款总额
detail = temp;
totalMoney = sum;
totalMoney = Math.floor(totalMoney * 100 + 0.5) / 100;
totalInterests = totalMoney - loanMoney;
totalInterests = Math.floor(totalInterests * 100 + 0.5) / 100;
}
前端页面显示(layUI)