房贷计算器移动端接口


/**
* 公积金或商业贷款(2015年10月24日最新商贷利率4.90%,公积金利率3.25%)---按贷款金额计算
*/
if(req.getType() == 0){//按贷款金额
/**
* 方式一:每月等额还款(等额本息)-----每月月供额=〔贷款本金×月利率×(1+月利率)^还款月数〕÷〔(1+月利率)^还款月数-1〕
*/
BigDecimal monthRate = req.getRate().divide(new BigDecimal(100 * 12), 9, BigDecimal.ROUND_HALF_UP);// 月利率, 四舍五入保留9位小数
BigDecimal apply  = req.getMoney().multiply(new BigDecimal("10000")); // 总贷款(万元)----转换为元
BigDecimal rate = monthRate.add(new BigDecimal(1)); // (1+月利率)
BigDecimal ratex = rate.pow(req.getYear() * 12); // (1+月利率)^还款月数

BigDecimal temp = monthRate.multiply(ratex); // 月利率×(1+月利率)^还款月数
BigDecimal firstPart = apply.multiply(temp);// 〔贷款本金×月利率×(1+月利率)^还款月数〕
BigDecimal secondPart = ratex.subtract(new BigDecimal(1));// 〔(1+月利率)^还款月数-1〕
BigDecimal money = firstPart.divide(secondPart, 9, BigDecimal.ROUND_HALF_UP);// 每月月供
BigDecimal pay = new BigDecimal(0);//已还金额
BigDecimal surplus = new BigDecimal(0);//剩余
BigDecimal lixi = money.multiply(new BigDecimal(req.getYear() * 12)).subtract(apply);//总利息=还款月数×每月月供额-贷款本金
BigDecimal sum = apply.add(lixi);//本息合计
BigDecimal avgMonthPay = sum.divide(new BigDecimal(req.getYear() * 12), 2, BigDecimal.ROUND_HALF_UP);
data.put("lixi", lixi);//总利息
data.put("sum", sum);//本息合计
data.put("avgMonthPay", avgMonthPay);//月均还款

BigDecimal monthPrincipal = new BigDecimal(0);
BigDecimal monthlixi = new BigDecimal(0);


List fundInfo = new ArrayList();
for(int i=1; i<13; i++){//i代表第几月

BigDecimal a = apply.multiply(monthRate);//贷款本金×月利率
BigDecimal b = rate.pow(i - 1);//(1+月利率)^(还款月序号-1)

//每月应还本金=贷款本金×月利率×(1+月利率)^(还款月序号-1)÷〔(1+月利率)^还款月数-1〕
//每月应还本金=a×b÷secondPart
monthPrincipal = a.multiply(b).divide(secondPart, 2, BigDecimal.ROUND_HALF_UP);
//每月应还利息=贷款本金×月利率×〔(1+月利率)^还款月数-(1+月利率)^(还款月序号-1)〕÷〔(1+月利率)^还款月数-1〕
//每月应还利息=a×〔ratex-b〕÷〔secondPart〕
monthlixi = a.multiply((ratex.subtract(b))).divide(secondPart, 2, BigDecimal.ROUND_HALF_UP);

pay = pay.add(monthPrincipal);//已还金额累计
surplus = apply.subtract(pay);//剩余

FundInfo info = new FundInfo();
info.setSurplus(surplus);//剩余本金
info.setMonthlixi(monthlixi);//当期利息
info.setMonthPrincipal(monthPrincipal);//当期本金
info.setMonthPay(monthPrincipal.add(monthlixi));//当期月供
fundInfo.add(info);
}
data.put("infos", fundInfo);//剩余
data.put("loan", apply);//贷款总额

}else if(req.getType() == 1){//按贷款金额
/**
* 方式二:每月递减还款(等额本金)-----每月月供额=(贷款本金÷还款月数)+(贷款本金-已归还本金累计额)×月利率
*/
BigDecimal apply  = req.getMoney().multiply(new BigDecimal("10000")); // 总贷款(万元)----转换为元
BigDecimal monthRate = req.getRate().divide(new BigDecimal(100 * 12), 6, BigDecimal.ROUND_UP);// 月利率, 保留6位小数
BigDecimal avg = apply.divide(new BigDecimal(req.getYear() * 12) , 2, BigDecimal.ROUND_HALF_UP);// 月均本息 == (贷款本金÷还款月数)
BigDecimal pay = new BigDecimal("0");//已还款金额,首月设为0
BigDecimal result = new BigDecimal("0");//首月月供
BigDecimal surplus = apply;//剩余
BigDecimal monthDec = apply.multiply(monthRate).divide(new BigDecimal(req.getYear() * 12), 2, BigDecimal.ROUND_UP);//每月月供递减额=每月应还本金×月利率=贷款本金÷还款月数×月利率

data.put("monthDec", monthDec);//每月递减(利息每月递减)

//月供本金=贷款本金÷还款月数
BigDecimal monthPrincipal = apply.divide(new BigDecimal(req.getYear() * 12), 2, BigDecimal.ROUND_HALF_UP);
BigDecimal monthlixi = (apply.subtract(pay)).multiply(monthRate);// 利息=(贷款本金-已归还本金累计额)×月利率
data.put("monthPrincipal", monthPrincipal);//月供本金

List fundInfo = new ArrayList();
for(int i=0; i<12; i++){
BigDecimal benjin = avg.add(avg.multiply(new BigDecimal(i)));//已还本金
surplus = apply.subtract(benjin); //剩余本金
BigDecimal lixi = monthlixi.subtract(monthDec.multiply(new BigDecimal(i)));//每月递减后的利息
result = avg.add(lixi); // 首月月供
pay = benjin.add(benjin.multiply(new BigDecimal(i)));//已还本金

FundInfo info = new FundInfo();
info.setMonthlixi(lixi);//偿还利息
info.setMonthPrincipal(monthPrincipal);//偿还本金
info.setSurplus(surplus);//剩余本金
info.setMonthPay(lixi.add(monthPrincipal));//当期月供
fundInfo.add(info);

}
data.put("infos", fundInfo);//月供

BigDecimal totallixi = new BigDecimal("0");//总利息
BigDecimal sum = new BigDecimal("0");//本息合计
BigDecimal avgPay = new BigDecimal("0");

for(int i=0; i


你可能感兴趣的:(java)