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

5 篇文章 2 订阅

import java.math.BigDecimal;

/**
 * 银行还款计划
 */
public class BankRefund {

	/**
	 * 等额本金还款法【利息少,但前期还的多】
	 * @param totalMoeny 贷款总额
	 * @param rate 贷款商业利率
	 * @param year 贷款年限
	 */
	public static void main(String[] args) throws Exception {
		int totalMoney=460000;
		double rate=4.9;
		int year=25;
		//double monthRes = monthPri + (totalMoney - monthPri * (i - 1)) * monthRate; 计算公式  
		BigDecimal bigtotalMoney = new BigDecimal(totalMoney);  
		BigDecimal bigtotalMonth = new BigDecimal(year * 12);  
		BigDecimal bigrate = new BigDecimal(rate);  
		BigDecimal biyearmonth = new BigDecimal(1200);
		double monthPri = bigtotalMoney.divide(bigtotalMonth, 2, BigDecimal.ROUND_HALF_UP).doubleValue();/**保留2位**/ 
		BigDecimal exactMonthPri=bigtotalMoney.divide(bigtotalMonth, 16, BigDecimal.ROUND_HALF_UP);/**保留16位**/
		for (int i = 1; i <= (year * 12); i++) {
			BigDecimal payedPri=exactMonthPri.multiply(new BigDecimal(i-1));/**已经还的本金**/
			BigDecimal remainPri=bigtotalMoney.subtract(payedPri);/**剩余本金**/
			BigDecimal monthInterest=remainPri.multiply(bigrate.divide(biyearmonth,16, BigDecimal.ROUND_HALF_UP));      
			System.out.print("第" + i + "月本金为:"+monthPri);  
			System.out.println("  月利息为:"+monthInterest.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());  
		}
	}

	/**
	 * 等额本息还款【利息多】
	 * @param totalMoeny 贷款总额
	 * @param rate 贷款商业利率
	 * @param year 贷款年限
	 */
	public static void interest(int totalMoney, double rate, int year) {
		
		double monRate = resMonthRate(rate);		
		double monInterest = totalMoney * monRate * Math.pow((1 + monRate), year * 12) / (Math.pow((1 + monRate), year * 12) - 1);
		BigDecimal b = new BigDecimal(monInterest);
		monInterest = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
		System.out.println("月供本息和:" + monInterest);

	}

	/**
	 * 转换为月利率
	 * @param rate
	 * @return
	 */
	public static double resMonthRate(double rate) {
		return rate / 12;
	}
	
	public static void main(String[] args) {

		int totalMoney = 460000;
		double rate = 0.049;
		int year = 25;
		// BankRefund.interest(totalMoney, rate, year);
		BankRefund.principal(totalMoney, rate, year);

	}
}
console:

第1月本金为:1533.33  月利息为:1878.33
第2月本金为:1533.33  月利息为:1872.07
第3月本金为:1533.33  月利息为:1865.81

。。。。。。


BigDecimal.setScale(newScale, roundingMode)方法用于格式化小数点

newScale指的是你小数点后的位数

roundingMode是小数的保留模式

BigDecimal.ROUND_HALF_UP表示的就是4舍5入。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值