您的位置:首页 > 其它

QLExpress计算等本等息、等额本息、等额本金

2017-05-08 09:03 253 查看
public class Interest {

private ExpressRunner runner = new ExpressRunner();

public void initial() throws Exception{
runner.addFunctionOfClassMethod("等本等息", Interest.class.getName(), "method1",new Class[] {double.class,double.class,int.class}, null);
runner.addFunctionOfClassMethod("等额本息", Interest.class.getName(), "method2",new Class[] {double.class,double.class,int.class}, null);
runner.addFunctionOfClassMethod("等额本金", Interest.class.getName(), "method3",new Class[] {double.class,double.class,int.class}, null);
}

public static void main(String[] args) throws Exception {
Interest indemo = new Interest();
indemo.initial();
Object r = indemo.runner.execute("等本等息(1000,0.008,12)", null, null, false, true);
System.out.println(r);
Object r2 = indemo.runner.execute("等额本息(1000,0.008,12)", null, null, false, true);
System.out.println(r2);
Object r3 = indemo.runner.execute("等额本金(1000,0.008,12)", null, null, false, true);
System.out.println("等额本金每个月的还款列表"+r3);
}

/**
* 等本等息还款方式计算每个月偿还本金和利息
* @param invest
* @param yearRate
* @param totalMonth
* @return
*/
public String method1(double invest,double yearRate,int totalMonth) {
double d = invest/totalMonth + invest*yearRate/totalMonth;
return "等本等息方式每个月应还款"+d;
}

/**
* 等额本息还款方式计算每月偿还本金和利息
* @param invest
* @param yearRate
* @param totalMonth
* @return
*/
public String method2(double invest, double yearRate, int totalMonth) {
double monthRate = yearRate / 12;
BigDecimal monthIncome = new BigDecimal(invest).multiply(new BigDecimal(monthRate * Math.pow(1 + monthRate, totalMonth))).divide(new BigDecimal(Math.pow(1 + monthRate, totalMonth)-1),2,BigDecimal.ROUND_DOWN);
return "等额本息方式每个月应还款"+monthIncome.doubleValue();
}

public Map<Integer, Double> method3(double invest, double yearRate, int totalMonth) {
Map<Integer, Double> map = new HashMap<Integer, Double>();  

        // 每月本金  

        double monthPri = getPerMonthPrincipal(invest, totalMonth);  

        // 获取月利率  

        double monthRate = yearRate / 12;  

        monthRate = new BigDecimal(monthRate).setScale(6, BigDecimal.ROUND_DOWN).doubleValue();  

        for (int i = 1; i <= totalMonth; i++) {  

            double monthRes = monthPri + (invest - monthPri * (i - 1)) * monthRate;  

            monthRes = new BigDecimal(monthRes).setScale(2, BigDecimal.ROUND_DOWN).doubleValue();  

            map.put(i, monthRes);  

        }  

        return map;  
}

/**  

     * 等额本金计算获取还款方式为等额本金的每月偿还本金  

     *   

     * 公式:每月应还本金=贷款本金÷还款月数  

     *   

     * @param invest  

     *            总借款额(贷款本金)  

     * @param yearRate  

     *            年利率  

     * @param month  

     *            还款总月数  

     * @return 每月偿还本金  

     */  

    public static double getPerMonthPrincipal(double invest, int totalMonth) {  

        BigDecimal monthIncome = new BigDecimal(invest).divide(new BigDecimal(totalMonth), 2, BigDecimal.ROUND_DOWN);  

        return monthIncome.doubleValue();  

    }  

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: