消费贷是目前比较流行的消费类金融产品,比较常见的使用方式采用随借随还,按日计息,按月付息方式。
默认计算方法是不考虑提前还款情况呢,那么假设我们提前还款,能够节省多少钱呢。因此本文介绍相关计算方法以及相关利率的概念。读者可以根据自己借款金额,借款利率,借款期限以及是否提前还本,来规划自己用款和还款计划。
注意消费贷中先息后本,无论是否提前还款,因为是按日计息=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%的理财产品,因此使用消费贷情况下,没有资金需求,提前归还消费贷,还是可以帮助我们节省利息支出的。名义年化利率仅供参考。