房产贷款计算器

贷款计算器

等额本息

    public Map<String,Object> returnMethodOne(Integer loanMethod,
                               Integer computeMethod,
                               BigDecimal businessPrice,
                               BigDecimal loanTotalPrice,
                               BigDecimal publicReserveFunds,
                               Integer businessYears,
                               Integer publicReserveFundsYears,
                               Integer rateMethod,
                               BigDecimal LPR,
                               BigDecimal publicReserveFundsRate,
                               BigDecimal basePoint,
                               BigDecimal businessRate,
                               BigDecimal houseTotalPrice,
                               BigDecimal loanRate
                                ){
        // 利息总额
        BigDecimal moneyRatesPrice = null;
        // 每月应还款数
        BigDecimal everymouthReturnPrice = null;

        List<ComputeInfoListVo> list = null;

        // 商业贷款
        if(1 == loanMethod){
        
            // 月利率 = 商贷利率 / 12
            BigDecimal monthRate  = businessRate.divide(new BigDecimal(100),10,BigDecimal.ROUND_HALF_UP).divide(new BigDecimal(12),10,BigDecimal.ROUND_HALF_UP);

            // 总利率 = (月利率 + 1)^月数
            BigDecimal totalRate = (monthRate.add(new BigDecimal(1))).pow(businessYears * 12);

            // 商贷每月还款 = 商贷金额 x 月利率 x 总利率 / (总利率 - 1)
            everymouthReturnPrice = ((businessPrice.multiply(monthRate)).multiply(totalRate)).divide((totalRate.subtract(new BigDecimal(1))),10,BigDecimal.ROUND_HALF_UP);

            // 商贷利息总额 = 商贷每月还款 x 月数 - 商贷金额
            moneyRatesPrice = everymouthReturnPrice.multiply(new BigDecimal(businessYears*12)).subtract(businessPrice);

            // 每月计算列表
            list = principalAndRateComputeList(loanMethod,monthRate,businessPrice,everymouthReturnPrice,businessYears * 12,null);

        }else if (2 == loanMethod){ // 组合贷款

            // 按贷款总额计算
            if(1 == computeMethod) {

                if (loanTotalPrice.compareTo(publicReserveFunds) < 0 || loanTotalPrice.compareTo(businessPrice) < 0) {
                    return null;
                }
            }

           
            // 公积金月利率 = 公积金利率 / 12
            BigDecimal publicRate = publicReserveFundsRate.divide(new BigDecimal(100),10,BigDecimal.ROUND_HALF_UP).divide(new BigDecimal(12),10,BigDecimal.ROUND_HALF_UP);

            // 基金总利率 = (公积金月利率 + 1)^月数
            BigDecimal publicTotalRate = (publicRate.add(new BigDecimal(1))).pow(publicReserveFundsYears*12);

            // 基金每月还款数 = 公积金金额 x 公积金月利率 x 基金总利率 / (基金总利率 - 1)
            BigDecimal publicMonthReturn = publicReserveFunds.multiply(publicRate).multiply(publicTotalRate).divide((publicTotalRate.subtract(new BigDecimal(1))),10,BigDecimal.ROUND_HALF_UP);

            // 基金利息总额 = 基金每月还款数 x 月数 - 公积金金额
            BigDecimal publicRateTotalPrice = publicMonthReturn.multiply(new BigDecimal(publicReserveFundsYears*12)).subtract(publicReserveFunds);


            // 月利率 = 商贷利率 / 12
            BigDecimal monthRate  = businessRate.divide(new BigDecimal(100),10,BigDecimal.ROUND_HALF_UP).divide(new BigDecimal(12),10,BigDecimal.ROUND_HALF_UP);
            // 总利率 = (月利率 + 1)^月数
            BigDecimal totalRate = (monthRate.add(new BigDecimal(1))).pow(businessYears * 12);
            // 商贷每月还款 = 商贷金额 x 月利率 x 总利率 / (总利率 - 1)
            BigDecimal businessMouthReturn = ((businessPrice.multiply(monthRate)).multiply(totalRate)).divide((totalRate.subtract(new BigDecimal(1))),10,BigDecimal.ROUND_HALF_UP);
            // 商贷利息总额 = 商贷每月还款 x 月数 - 商贷金额
            BigDecimal businessRateTotalPrice = businessMouthReturn.multiply(new BigDecimal(businessYears*12)).subtract(businessPrice);


            // 按贷款总额计算,每月还款金额 = 公积金还款金额 + 商贷还款金额
            everymouthReturnPrice = publicMonthReturn.add(businessMouthReturn);

            // 利息总额 = 商贷利息总额 + 基金利息总额
            moneyRatesPrice = businessRateTotalPrice.add(publicRateTotalPrice);

            int years = 0;
            if (businessYears > publicReserveFundsYears){
                years = businessYears;
            }else {
                years = publicReserveFundsYears;
            }

            // 每月计算列表
            list = principalAndRateComputeList(loanMethod,null,loanTotalPrice,everymouthReturnPrice,years*12,businessMouthReturn);

        }else if (3 == loanMethod){ // 公积金贷款

            // 公积金月利率 = 公积金利率 / 12
            BigDecimal publicRate = publicReserveFundsRate.divide(new BigDecimal(100),10,BigDecimal.ROUND_HALF_UP).divide(new BigDecimal(12),10,BigDecimal.ROUND_HALF_UP);

            // 基金总利率 = (公积金月利率 + 1)^月数
            BigDecimal publicTotalRate = (publicRate.add(new BigDecimal(1))).pow(publicReserveFundsYears*12);

            // 基金每月还款数 = 公积金金额 x 公积金月利率 x 基金总利率 / (基金总利率 - 1)
            everymouthReturnPrice = publicReserveFunds.multiply(publicRate).multiply(publicTotalRate).divide((publicTotalRate.subtract(new BigDecimal(1))),10,BigDecimal.ROUND_HALF_UP);

            // 基金利息总额 = 基金每月还款数 x 月数 - 公积金金额
            moneyRatesPrice = everymouthReturnPrice.multiply(new BigDecimal(publicReserveFundsYears*12)).subtract(publicReserveFunds);

            // 每月计算列表
            list = principalAndRateComputeList(loanMethod,publicRate,publicReserveFunds,everymouthReturnPrice,publicReserveFundsYears*12,null);
        }


        // 等额本息贷款计算返回结果视图
        LoanComputeVo principalAndRateVo = new LoanComputeVo();
        principalAndRateVo.setEveryMouthReturn(everymouthReturnPrice.setScale(2,BigDecimal.ROUND_HALF_UP));
        if (1 == loanMethod){
            principalAndRateVo.setLoanTotal(businessPrice.divide(new BigDecimal(10000),2,BigDecimal.ROUND_HALF_UP));
            principalAndRateVo.setLoanYears(businessYears);
        }else if (2 == loanMethod){

            principalAndRateVo.setLoanTotal(loanTotalPrice.divide(new BigDecimal(10000),2,BigDecimal.ROUND_HALF_UP));

            if (businessYears > publicReserveFundsYears){
                principalAndRateVo.setLoanYears(businessYears);
            }else {
                principalAndRateVo.setLoanYears(publicReserveFundsYears);
            }

        }else if (3 == loanMethod){
            principalAndRateVo.setLoanTotal(publicReserveFunds.divide(new BigDecimal(10000),2,BigDecimal.ROUND_HALF_UP));
            principalAndRateVo.setLoanYears(publicReserveFundsYears);
        }
        principalAndRateVo.setRateTotalPrice(moneyRatesPrice.divide(new BigDecimal(10000),2,BigDecimal.ROUND_HALF_UP));

        HashMap<String, Object> hashMap = new HashMap<>();
        hashMap.put("principalAndRateVo",principalAndRateVo);
        hashMap.put("principalAndRateComputeList",list);

        return hashMap;
    }

等额本金

 public Map<String,Object> returnMethodTwo(Integer loanMethod,
                                Integer computeMethod,
                                BigDecimal businessPrice,
                                BigDecimal loanTotalPrice,
                                BigDecimal publicReserveFunds,
                                Integer businessYears,
                                Integer publicReserveFundsYears,
                                Integer rateMethod,
                                BigDecimal LPR,
                                BigDecimal publicReserveFundsRate,
                                BigDecimal basePoint,
                                BigDecimal businessRate,
                                BigDecimal houseTotalPrice,
                                BigDecimal loanRate
                                ){
        // 首月应还金额
        BigDecimal everymouthReturnPrice = null;
        // 每月递减利息
        BigDecimal decreaseMonth = null;
        // 利息总额
        BigDecimal moneyRatesPrice = null;

        List<ComputeInfoListVo> list = null;

        if(1 == loanMethod){

            // 月利率
            BigDecimal monthRate  = businessRate.divide(new BigDecimal(100),10,BigDecimal.ROUND_HALF_UP).divide(new BigDecimal(12),10,BigDecimal.ROUND_HALF_UP);
            // 每月还款本金
            BigDecimal prePrincipal = businessPrice.divide(new BigDecimal(businessYears*12),10,BigDecimal.ROUND_HALF_UP);
            // 首月应还金额
            everymouthReturnPrice = prePrincipal.add(businessPrice.multiply(monthRate));
            // 每月递减利息
            decreaseMonth = prePrincipal.multiply(monthRate);
            // 利息总额
            moneyRatesPrice = businessPrice.multiply(new BigDecimal(businessYears*12 +1)).multiply(monthRate).divide(new BigDecimal(2),10,BigDecimal.ROUND_HALF_UP);

            // 等额本金每月计算列表
            list = principalList(loanMethod,businessPrice,monthRate,businessYears*12,null,null,null,null);

        }else if (2 == loanMethod){

            // 按贷款总额计算
            if(1 == computeMethod) {
                // 贷款金额 = 贷款总额 - 公积金金额
                if (loanTotalPrice.compareTo(publicReserveFunds) < 0 || loanTotalPrice.compareTo(businessPrice) < 0) {
                    return null;
                }
            }

            // 基金月利率
            BigDecimal publicMonthRate = publicReserveFundsRate.divide(new BigDecimal(100),10,BigDecimal.ROUND_HALF_UP).divide(new BigDecimal(12),10,BigDecimal.ROUND_HALF_UP);
            // 基金每月还款本金
            BigDecimal prePubPrincipal = publicReserveFunds.divide(new BigDecimal(publicReserveFundsYears*12),10,BigDecimal.ROUND_HALF_UP);
            // 基金首月应还金额
            BigDecimal firstPubMonth = prePubPrincipal.add(publicReserveFunds.multiply(publicMonthRate));
            // 基金每月递减利息
            BigDecimal pubDecreaseMonth = prePubPrincipal.multiply(publicMonthRate);
            // 基金利息总额
            BigDecimal pubRateTotal = publicReserveFunds.multiply(new BigDecimal(publicReserveFundsYears*12+1)).multiply(publicMonthRate).divide(new BigDecimal(2),10,BigDecimal.ROUND_HALF_UP);

            // 月利率
            BigDecimal monthRate  = businessRate.divide(new BigDecimal(100),10,BigDecimal.ROUND_HALF_UP).divide(new BigDecimal(12),10,BigDecimal.ROUND_HALF_UP);
            // 每月还款本金
            BigDecimal prePrincipal = businessPrice.divide(new BigDecimal(businessYears*12),10,BigDecimal.ROUND_HALF_UP);
            // 商贷首月应还金额
            BigDecimal busFirstMonth = prePrincipal.add(businessPrice.multiply(monthRate));
            // 商贷每月递减利息
            BigDecimal busDecreaseMouth = prePrincipal.multiply(monthRate);
            // 商贷利息总额
            BigDecimal busRateTotalPrice = businessPrice.multiply(new BigDecimal(businessYears*12 +1)).multiply(monthRate).divide(new BigDecimal(2),10,BigDecimal.ROUND_HALF_UP);

            // 首月应还金额 = 商贷首月应还金额 + 基金首月应还金额
            everymouthReturnPrice = busFirstMonth.add(firstPubMonth);
            // 每月递减利息 = 商贷每月递减利息 + 基金每月递减利息
            decreaseMonth = busDecreaseMouth.add(pubDecreaseMonth);
            // 利息总额 = 商贷利息总额 + 基金利息总额
            moneyRatesPrice = busRateTotalPrice.add(pubRateTotal);

            int years = 0;
            if(businessYears > publicReserveFundsYears){
                years = businessYears;
            }else {
                years = publicReserveFundsYears;
            }

            // 等额本金每月计算列表
            list = principalList(loanMethod,loanTotalPrice,null,years*12,firstPubMonth,pubDecreaseMonth,busFirstMonth,busDecreaseMouth);

        }else if (3 == loanMethod){

            // 基金月利率
            BigDecimal publicMonthRate = publicReserveFundsRate.divide(new BigDecimal(100),10,BigDecimal.ROUND_HALF_UP).divide(new BigDecimal(12),10,BigDecimal.ROUND_HALF_UP);
            // 基金每月还款本金
            BigDecimal prePubPrincipal = publicReserveFunds.divide(new BigDecimal(publicReserveFundsYears*12),10,BigDecimal.ROUND_HALF_UP);
            // 基金首月应还金额
            everymouthReturnPrice = prePubPrincipal.add(publicReserveFunds.multiply(publicMonthRate));
            // 基金每月递减利息
            decreaseMonth = prePubPrincipal.multiply(publicMonthRate);
            // 基金利息总额
            moneyRatesPrice = publicReserveFunds.multiply(new BigDecimal(publicReserveFundsYears*12+1)).multiply(publicMonthRate).divide(new BigDecimal(2),10,BigDecimal.ROUND_HALF_UP);

            // 等额本金每月计算列表
            list = principalList(loanMethod,publicReserveFunds,publicMonthRate,publicReserveFundsYears*12,null,null,null,null);
        }

        // 等额本息贷款计算返回结果视图
        LoanComputeVo principalVo = new LoanComputeVo();
        principalVo.setEveryMouthReturn(everymouthReturnPrice.setScale(2,BigDecimal.ROUND_HALF_UP));
        if (1 == loanMethod){
            principalVo.setLoanTotal(businessPrice.divide(new BigDecimal(10000),2,BigDecimal.ROUND_HALF_UP));
            principalVo.setLoanYears(businessYears);
        }else if (2 == loanMethod){

            principalVo.setLoanTotal(loanTotalPrice.divide(new BigDecimal(10000),2,BigDecimal.ROUND_HALF_UP));

            if (businessYears > publicReserveFundsYears){
                principalVo.setLoanYears(businessYears);
            }else {
                principalVo.setLoanYears(publicReserveFundsYears);
            }

        }else if (3 == loanMethod){
            principalVo.setLoanTotal(publicReserveFunds.divide(new BigDecimal(10000),2,BigDecimal.ROUND_HALF_UP));
            principalVo.setLoanYears(publicReserveFundsYears);
        }
        principalVo.setRateTotalPrice(moneyRatesPrice.divide(new BigDecimal(10000),2,BigDecimal.ROUND_HALF_UP));
        principalVo.setDecreaseMouth(decreaseMonth.setScale(2,BigDecimal.ROUND_HALF_UP));

        Map<String,Object> hashMap = new HashMap<>();
        hashMap.put("principalVo",principalVo);
        hashMap.put("principalList",list);

        return hashMap;
    }

项目中有贷款计算器功能,第一次写贷款计算器,哪里又不好之处望大家谅解,谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值