Java中利息的计算--->1.等额本息2.先息后本

整理了两种关于利息的计算(可以写成一个专门的工具类,当然小编我是入门级的选手,按照自己的思路写了一下,仅供和我 一样入门级的朋友参考):

public class MathAboutBorrow {
public static Double borrowMoney;
public static Integer month;
public static Double prate;
private static Double [] rate1 = new Double [month] ;//定义一个数组用来存周期内每个月需要还的钱
private static Double [] rate2 = new Double [month] ;
private static double amountRate1 = 0.0;//每月需还总金额
private static double amountRate2 = 0.0;//每月需还总金额

//确定还款日
public static Integer getRepayDay(){
SimpleDateFormat sdf = new SimpleDateFormat("dd");//需要得到的日期是今天在当月中的具体日期
String _repayDay = sdf.format(new Date());
int _day = Integer.parseInt(_repayDay);
Integer repayDay = null;

//根据今天的日期,判定还款日是哪一天(分为上中旬三个阶段,取中间的6号为还款日,这个可以根据自己的产品去定义合适的日期)
if(( _day <= 5 && _day > 0 ) || (_day > 25 && _day <= 31)){
repayDay = 6;
}else if(_day > 5 && _day <= 15){
repayDay = 16;
}else if(_day > 15 && _day <= 25){
repayDay = 26;
}

Integer betweenTime = repayDay - _day;
return betweenTime;
}


//先息后本每月还款的金额--->由数组记录
public static Double[] periodFristMonth(){
Integer betweenTime = getRepayDay();
Calendar calen = Calendar.getInstance();
Date date = new Date();
//先息后本的还款总金额和每月还款金额
for(int i=1;i<=month;i++){


long startDay = date.getTime();//获得现在的时间,转换成毫秒
calen.add(Calendar.MONTH, 1);//定义一个时间--->加一个月
long endDay = calen.getTime().getTime();//得到上面定义的一个月的时间的毫秒值
//得到定义的下个月的时间和现在的时间之间的差,与我们定义的还款日的差别,不到还款日默认要加上差的天数
//(借款利息在借款当天就生效,第一个月的时候不到默认还款日的时候,时间差的利息也要加上)
long days = (endDay - startDay)/3600/24/1000+betweenTime;
double periodMonth = prate*days;

rate1[i-1] = borrowMoney*periodMonth;//将这个月的利息写入数组中
calen.setTime(calen.getTime());
date = calen.getTime();

}
rate1[month-1] = rate1[month-1] + borrowMoney;//先息后本的最后一个月要将本金还上,所以最后一个月的还款为最后一个月的利息+本金

return rate1;//返回先息后本的数组
}

//先息后本的总金额计算
public static Double repayPeriodFrist(){
rate1 = periodFristMonth();
for(int i=1;i<=month;i++){
amountRate1 += rate1[i-1];
}
amountRate1 += borrowMoney;//得到先息后本的总的还款金额,先息后本最后一个月要将借款金额加上
return amountRate1;
}

//等额还款每月还款的金额--->由数组记录
public static Double[] periodSameMonth(){
Calendar calen = Calendar.getInstance();
Date date = new Date();
long rate2startDay = date.getTime();//获得现在的时间,转换成毫秒
calen.add(Calendar.MONTH, month);
long rate2endDay = calen.getTime().getTime();
long avgdays = (rate2endDay - rate2startDay)/3600/24/1000/month;
double monthPrate = prate*avgdays;
//等额本息的还款总金额和每月还款金额
for(int i=1;i<=month;i++){
double value = Math.pow((1+monthPrate),month+1);
rate2[i-1] = borrowMoney*(monthPrate*value)/(value-1);
}

return rate2;
}

//等额还款的总还款金额
public static Double repaySame(){
rate2 = periodSameMonth();

//等额本息的还款总金额和每月还款金额
for(int i=1;i<=month;i++){
amountRate2 += rate2[i-1];
}

return amountRate2;
}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值