在做金融方面开发的时候,有时会涉及到贷款。既然贷款,那么就需要还款,那每月的还款额度及利息就需要进行计算。此前没有接触过此类的开发,当这次遇到的这个需求的时候,就卡壳了,费了些时间才算开发完,在此记录一下。
贷款的还款方式一般分为等额本金和等额本息。
1、等额本金
概念:等额本金是指一种贷款的还款方式,是在还款期内把贷款数总额等分,每月偿还同等数额的本金和剩余贷款在该月所产生的利息,这样由于每月的还款本金额固定,而利息越来越少,借款人起初还款压力较大,但是随时间的推移每月还款数也越来越少。
计算方式:每月还款本金 = 贷款金额/贷款期数
每月还款利息 = (贷款金额-(期数-1)*每月还款本金)*月利率
举例:贷款金额为a,期数为b,月利率为c,每月的本金为m,每月还款利息为n,总利息为x,还款总额为y
m = a/b;
for (int i = 1; i <= b; i++) { n = (a - (b - 1) * m) * c; x = x+n; }
y = a + x;
2、等额本息
概念:等额本息是指一种贷款的还款方式,指在还款期内,每月偿还同等数额的贷款(包括本金和利息)。
计算方式:每月应还金额 = 贷款本金*[贷款月利率*(1+贷款月利率)^贷款月数]/[(1+贷款月利率)^贷款月数-1]
举例:a:贷款本金 ,i:贷款月利率, n:贷款月数,m:每月应还金额
m = a*[i*(1+i)^n]/[(1+i)^n-1],这也可以这样写:m = a*(i*Math.pow(1+i,n))/(Math.pow(1+i,n)-1)
说明:这种方式只能算出每月还款的本息和,等额本息的还款方式计算每月应还的本金和利息就比较麻烦,下面是我的计算方式(这种方式为啥可以计算出来,我还不是很明白,反正就是各种百度之后的结果。。。):
贷款金额为a,期数为b,月利率为c,每月的本金为m,每月还款利息为n,每月应还本息和为k,总利息为x,还款总额为y
k = a*(c*Math.pow(1+c,b))/(Math.pow(1+c,b)-1); y = k*b; x = y-a; for (int i = 1; i <= b; i++) { n = (a*c-k)*Math.pow(1+c,i-1)+k; m = k-n; }
附:月利率 = 年利率/12;Math.pow(a,b)的意思是a的b次方