整理了兩種關于利息的計算(可以寫成一個專門的工具類,當然小編我是入門級的選手,按照自己的思路寫了一下,僅供和我 一樣入門級的朋友參考):
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;
}
}