- package jdongtech.jiebaiUtils;
-
- import java.util.Arrays;
- import java.util.Calendar;
- import java.util.HashMap;
- import java.util.Map;
-
- import jdongtech.interestUtils.AverageCapitalPlusInterestUtils;
-
- public class normalRepay {
- public static void main(String[] args) {
-
- double invest = 120;
- int month = 6;
- double yearRate = 14.4 / 100;
- int acctOffsetDay = 15;
- int accountDay = 13;
-
- Calendar lendDay = Calendar.getInstance();
- lendDay.set(Calendar.MONTH, 4);
- lendDay.set(Calendar.DAY_OF_MONTH, 13);
-
- double dateRate = yearRate / 360;
- int[] daysCount = new int[month];
- int IncreaseFlag = 0;
- Calendar lendCalOffset = (Calendar) lendDay.clone();
- lendCalOffset.add(Calendar.DATE, acctOffsetDay);
- Calendar accCal = (Calendar) lendDay.clone();
- accCal.set(Calendar.DAY_OF_MONTH, accountDay);
- Calendar accCalBegin = (Calendar) accCal.clone();
- if (lendCalOffset.before(accCal)) {
- } else {
- accCalBegin.add(Calendar.MONTH, 1);
- IncreaseFlag = 1;
- }
- Calendar accCalEnd = (Calendar) accCal.clone();
- accCalEnd.add(Calendar.MONTH, month-1);
-
- System.out.println(lendDay.getTime() + "借款日期");
- System.out.println(accCalBegin.getTime() + "开始");
- System.out.println(accCalEnd.getTime() + "结束");
- int daysLending = RepayUtils.daysOffset(lendDay, accCalEnd);
- System.out.println("借款经历" + daysLending + "天");
-
- Calendar accCalPerEnd = (Calendar) accCalBegin.clone();
- for (int i = 0; i < month; i++) {
- Calendar accCalPerBeg;
- if (i == 0) {
- accCalPerBeg = (Calendar) lendDay.clone();
- } else {
- accCalPerBeg = (Calendar) accCalPerEnd.clone();
- accCalPerBeg.add(Calendar.MONTH, -1);
- }
-
- int daysPer = RepayUtils.daysOffset(accCalPerBeg, accCalPerEnd);
- daysCount[i] = daysPer;
- accCalPerEnd.add(Calendar.MONTH, 1);
- }
-
- getPerMonthPrincipalInterestBig(invest, dateRate, month, daysCount, IncreaseFlag);
- }
-
-
- public static double getPerMonthPrincipalInterestBig(double invest, double dateRate, int totalmonth, int[] daysCount,
- int IncreaseFlag) {
- IncreaseFlag = 1;
- double perMonthStandard = AverageCapitalPlusInterestUtils.getPerMonthPrincipalInterest(invest, dateRate * 360,
- totalmonth);
-
- double perMonthMax = perMonthStandard * 1.1;
- double[] PRperMonth = new double[totalmonth];
- double[] PperMonth = new double[totalmonth];
- double[] RperMonth = new double[totalmonth];
- double[] PLeftperMonth = new double[totalmonth];
- Map<Double, Double> lastCheckMap = new HashMap<Double, Double>();
- Map<Double, String> PLeftperMonthMap = new HashMap<Double, String>();
- Map<Double, String> PRperMonthMap = new HashMap<Double, String>();
- Map<Double, String> PperMonthMap = new HashMap<Double, String>();
- Map<Double, String> RperMonthMap = new HashMap<Double, String>();
- Map<Double, Double> sumPRMap = new HashMap<Double, Double>();
- Map<Double, Double> sumPMap = new HashMap<Double, Double>();
- Map<Double, Double> sumRMap = new HashMap<Double, Double>();
-
- if (IncreaseFlag == 1) {
- while (perMonthStandard < perMonthMax) {
- PRperMonth[0] = RepayUtils.num2second(perMonthStandard);
- PLeftperMonth[0] = RepayUtils.num2second(invest);
- RperMonth[0] = RepayUtils.num2secondDown(PLeftperMonth[0] * daysCount[0] * dateRate);
- PperMonth[0] = RepayUtils.num2second(PRperMonth[0] - RperMonth[0]);
- for (int j = 1; j < totalmonth; j++) {
- PRperMonth[j] = RepayUtils.num2second(perMonthStandard);
- PLeftperMonth[j] = RepayUtils.num2second(PLeftperMonth[j - 1] - PperMonth[j - 1]);
- RperMonth[j] = RepayUtils.num2secondDown(PLeftperMonth[j] * dateRate * daysCount[j]);
- PperMonth[j] = RepayUtils.num2second(PRperMonth[j] - RperMonth[j]);
- if (j == totalmonth - 1) {
- PperMonth[j] = RepayUtils.num2second(PLeftperMonth[j]);
- PRperMonth[j] = RepayUtils.num2second(PperMonth[j] + RperMonth[j]);
- }
- }
- double sumP = 0;
- double sumR = 0;
- double sumPR = 0;
- for (int i = 0; i < PLeftperMonth.length; i++) {
- sumP = sumP + PperMonth[i];
- sumR = sumR + RperMonth[i];
- sumPR = sumPR + PRperMonth[i];
- }
- lastCheckMap.put(RepayUtils.num2second(perMonthStandard),
- Math.abs(PRperMonth[totalmonth - 1] - PRperMonth[totalmonth - 2]));
- PLeftperMonthMap.put(RepayUtils.num2second(perMonthStandard), Arrays.toString(PLeftperMonth));
- PRperMonthMap.put(RepayUtils.num2second(perMonthStandard), Arrays.toString(PRperMonth));
- PperMonthMap.put(RepayUtils.num2second(perMonthStandard), Arrays.toString(PperMonth));
- RperMonthMap.put(RepayUtils.num2second(perMonthStandard), Arrays.toString(RperMonth));
- sumPRMap.put(RepayUtils.num2second(perMonthStandard), RepayUtils.num2second(sumPR));
- sumPMap.put(RepayUtils.num2second(perMonthStandard), RepayUtils.num2second(sumP));
- sumRMap.put(RepayUtils.num2second(perMonthStandard), RepayUtils.num2second(sumR));
-
- perMonthStandard = perMonthStandard + 0.01;
- }
- }
-
- Double resultKey = RepayUtils.getKeyByMinValue(lastCheckMap);
-
- System.out.println("等额本息每月还款额:" + resultKey);
- System.out.println("每期经历" + Arrays.toString(daysCount));
- System.out.println("每月余本金:" + PLeftperMonthMap.get(resultKey));
- System.out.println("每月还款额:" + PRperMonthMap.get(resultKey));
- System.out.println("每月还本金:" + PperMonthMap.get(resultKey));
- System.out.println("每月还利息:" + RperMonthMap.get(resultKey));
- System.out.println("总还款额:" + sumPRMap.get(resultKey));
- System.out.println("总还本金:" + sumPMap.get(resultKey));
- System.out.println("总还利息:" + sumRMap.get(resultKey));
- return resultKey;
- }
-
- }
posted @
2017-05-17 10:52
葫芦一生
阅读(
802)
评论()
编辑
收藏
举报