天天看點

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;

}

}