使用java消费贷计算

发布时间:2024年01月18日

简介

消费贷是目前比较流行的消费类金融产品,比较常见的使用方式采用随借随还,按日计息,按月付息方式。
在这里插入图片描述
默认计算方法是不考虑提前还款情况呢,那么假设我们提前还款,能够节省多少钱呢。因此本文介绍相关计算方法以及相关利率的概念。读者可以根据自己借款金额,借款利率,借款期限以及是否提前还本,来规划自己用款和还款计划。

注意消费贷中先息后本,无论是否提前还款,因为是按日计息=3.6%/360(天),实际利率都是固定。本文提供提前还款相关计算用以评估,和不提前还款相比,利息成本的差距。

相关阅读推荐:使用java房贷月供计算

利率

名义利率

名义利率,一般是指在一定期间内付出利息的总和与贷款本金的比值。

实际利率

在这里插入图片描述

  • 实际利率考虑了除了名义利率之外的其他费用、通货膨胀和复利等因素,反映了实际的贷款成本或投资收益。
  • 它是更真实的利率,能够更准确地衡量贷款或投资的实际成本或收益。
  • 由于实际利率考虑了复利的影响,因此通常略高于名义利率

消费贷计算(考虑提前还本)

使用java代码计算消费贷先息后本得还款方式,产生得总利息及利息占比。

不提前还本

public class LoanCalculatorWithActualAnnualRate {

    // 计算实际有还利息的月数
    public static Integer actualRepaymentMonths = 0;

    public static void main(String[] args) {
        // 输入参数
        BigDecimal loanAmount = new BigDecimal("100000"); // 贷款额
        BigDecimal annualInterestRate = new BigDecimal("0.036"); // 年利率
        int numberOfMonths = 12; // 借款月数
        BigDecimal earlyRepaymentAmount = new BigDecimal("0"); // 每月提前还本金额

        System.out.println(MessageFormat.format("【贷款金额】:{0} 【年利率】:{1} 【借款月数】:{2} 【每月提前还本金额】:{3}", loanAmount, annualInterestRate, numberOfMonths, earlyRepaymentAmount));
        // 计算月利率
        BigDecimal monthlyInterestRate = calculateMonthlyInterestRate(annualInterestRate);

        // 计算总利息(考虑提前还本)
        BigDecimal totalInterest = calculateTotalInterestWithEarlyRepayment(loanAmount, monthlyInterestRate, numberOfMonths, earlyRepaymentAmount);


        // 计算年化利率
        BigDecimal annualRateAfterOneYear = calculateAnnualInterestRate(totalInterest, loanAmount, actualRepaymentMonths);

        // 输出结果
        System.out.println("借款总利息: " + totalInterest.setScale(2, BigDecimal.ROUND_HALF_UP) + "元");
        System.out.println("名义年化利率[转化后]: " + annualRateAfterOneYear.setScale(4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")) + "%");
        System.out.println("名义利率[总利息/总贷款额]:" + totalInterest.divide(loanAmount).multiply(new BigDecimal("100")) + "%");
    }

    // 计算月利率
    private static BigDecimal calculateMonthlyInterestRate(BigDecimal annualInterestRate) {
        return annualInterestRate.divide(new BigDecimal("12"), 6, BigDecimal.ROUND_HALF_UP);
    }

    // 计算总利息(考虑提前还本)
    private static BigDecimal calculateTotalInterestWithEarlyRepayment(BigDecimal loanAmount, BigDecimal monthlyInterestRate, int numberOfMonths, BigDecimal earlyRepaymentAmount) {
        BigDecimal totalInterest = BigDecimal.ZERO;
        BigDecimal remainingLoanAmount = loanAmount;


        for (int i = 0; i < numberOfMonths; i++) {
            // 计算当月利息
            BigDecimal interest = remainingLoanAmount.multiply(monthlyInterestRate);

            // 计算当月本金还款
            BigDecimal principalRepayment = earlyRepaymentAmount.min(remainingLoanAmount);

            // 更新剩余本金
            remainingLoanAmount = remainingLoanAmount.subtract(principalRepayment);

            // 累加总利息
            totalInterest = totalInterest.add(interest);

            // 输出每月情况
            System.out.println("第 " + (i + 1) + " 个月:利息=" + interest.setScale(2, BigDecimal.ROUND_HALF_UP) + ",本金还款=" + principalRepayment.setScale(2, BigDecimal.ROUND_HALF_UP) + ",剩余本金=" + remainingLoanAmount.setScale(2, BigDecimal.ROUND_HALF_UP));
            if (interest.intValue() != 0) {
                actualRepaymentMonths = i + 1;
            }

        }

        return totalInterest;
    }



    // 计算
    private static BigDecimal calculateAnnualInterestRate(BigDecimal totalInterest, BigDecimal loanAmount, int actualRepaymentMonths) {
        return totalInterest.divide(loanAmount, 6, BigDecimal.ROUND_HALF_UP).divide(new BigDecimal(actualRepaymentMonths), 6, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("12"));
    }
}

计算结果

【贷款金额】:100,000 【年利率】:0.036 【借款月数】:12 【每月提前还本金额】:0
第 1 个月:利息=300.00,本金还款=0.00,剩余本金=100000.00
第 2 个月:利息=300.00,本金还款=0.00,剩余本金=100000.00
第 3 个月:利息=300.00,本金还款=0.00,剩余本金=100000.00
第 4 个月:利息=300.00,本金还款=0.00,剩余本金=100000.00
第 5 个月:利息=300.00,本金还款=0.00,剩余本金=100000.00
第 6 个月:利息=300.00,本金还款=0.00,剩余本金=100000.00
第 7 个月:利息=300.00,本金还款=0.00,剩余本金=100000.00
第 8 个月:利息=300.00,本金还款=0.00,剩余本金=100000.00
第 9 个月:利息=300.00,本金还款=0.00,剩余本金=100000.00
第 10 个月:利息=300.00,本金还款=0.00,剩余本金=100000.00
第 11 个月:利息=300.00,本金还款=0.00,剩余本金=100000.00
第 12 个月:利息=300.00,本金还款=0.00,剩余本金=100000.00
借款总利息: 3600.00元
名义年化利率[转化后]: 3.6000%
名义利率[总利息/总贷款额]:3.600000%

每月提前还本

假设每月提前还本2000元。修改上面代码

        BigDecimal earlyRepaymentAmount = new BigDecimal("2000"); // 每月提前还本金额

计算结果

【贷款金额】:100,000 【年利率】:0.036 【借款月数】:12 【每月提前还本金额】:2,000
第 1 个月:利息=300.00,本金还款=2000.00,剩余本金=98000.00
第 2 个月:利息=294.00,本金还款=2000.00,剩余本金=96000.00
第 3 个月:利息=288.00,本金还款=2000.00,剩余本金=94000.00
第 4 个月:利息=282.00,本金还款=2000.00,剩余本金=92000.00
第 5 个月:利息=276.00,本金还款=2000.00,剩余本金=90000.00
第 6 个月:利息=270.00,本金还款=2000.00,剩余本金=88000.00
第 7 个月:利息=264.00,本金还款=2000.00,剩余本金=86000.00
第 8 个月:利息=258.00,本金还款=2000.00,剩余本金=84000.00
第 9 个月:利息=252.00,本金还款=2000.00,剩余本金=82000.00
第 10 个月:利息=246.00,本金还款=2000.00,剩余本金=80000.00
第 11 个月:利息=240.00,本金还款=2000.00,剩余本金=78000.00
第 12 个月:利息=234.00,本金还款=2000.00,剩余本金=76000.00
借款总利息: 3204.00元
名义年化利率[转化后]: 3.2000%
名义利率[总利息/总贷款额]:3.204000%

可以看到如果每月提前还2000元本金可以节省(3600-3204)利息。这里的利息节省,只是评估我们减少对银行支出利息情况。因为提前还款的本金,假设不还也是可以产生利息收入的。只是我们手上的闲钱,在经济下行情况下,未必能找到年化收益3.6%的理财产品,因此使用消费贷情况下,没有资金需求,提前归还消费贷,还是可以帮助我们节省利息支出的。名义年化利率仅供参考。

文章来源:https://blog.csdn.net/Myron_007/article/details/135672714
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。