java实现贷款计算器(工具类)

贷款相关内容请参考 等额本金与等额本息

等额本息:每个月的还款金额相同

等额本息法最重要的一个特点是每月的还款额相同,从本质上来说是本金所占比例逐月递增,利息所占比例逐月递减,月还款数不变,即在月供“本金与利息”的分配比例中,前半段时期所还的利息比例大、本金比例小,还款期限过半后逐步转为本金比例大、利息比例小,其计算公式为:

每月还本付息金额 =[ 本金 x 月利率 x(1+月利率)贷款月数 ] / [(1+月利率)还款月数 - 1]

每月利息 = 剩余本金x贷款月利率

还款总利息=贷款额贷款月数月利率*(1+月利率)贷款月数/【(1+月利率)还款月数 - 1】-贷款额

还款总额=还款月数贷款额月利率*(1+月利率)贷款月数/【(1+月利率)还款月数 - 1】

等额本金:每个月还本金相同,但每月还款金额不同

等额本金法最大的特点是每月的还款额不同,呈现逐月递减的状态;它是将贷款本金按还款的总月数均分,再加上上期剩余本金的利息,这样就形成月还款额,所以等额本金法第一个月的还款额最多 ,然后逐月减少,越还越少,计算公式为:

每月还本付息金额=(本金/还款月数)+(本金-累计已还本金)×月利率

每月本金=总本金/还款月数

每月利息=(本金-累计已还本金)×月利率

还款总利息=(还款月数+1)贷款额月利率/2

还款总额=(还款月数+1)贷款额月利率/2+贷款额

注意:在等额本金法中,人们每月归还的本金额始终不变,利息随剩余本金的减少而减少,因而其每月还款额逐渐减少。

主要参数:
	private double loanMoney;  //贷款金额 
	
	private int years; //贷款年限
	
	private double yIns; //年利率

	private double totalMoney;  //还款金额(本金+利息)
	
	private double totalInterests; //利息总额
	
	private double detail[][];  //每月还款详情
对外接口
//等额本息
public void EqualPrincipalandInterestMethod() {
		
		double mIns = yIns / 100 / 12; //月利率
		int months = (years * 12); //还款所需月份
		double pow = Math.pow(1 + mIns,months); 
		double remains = loanMoney;
		totalMoney = (months * loanMoney * mIns * pow) / (pow - 1);  //总还款金额
		totalMoney = Math.floor(totalMoney * 100 + 0.5) / 100;  //floor函数 保留两位小数
		totalInterests = totalMoney - loanMoney;
		totalInterests = Math.floor(totalInterests * 100 + 0.5) / 100;
		double temp[][] = new double[months][3];
		for (int i = 0; i < months; i++) {
			if(i == months - 1) {
				temp[i][1] = remains * mIns; 
				temp[i][1] = Math.floor(temp[i][1] * 100 + 0.5) / 100;
				temp[i][0] = remains; 
				temp[i][0] = Math.floor(temp[i][0] * 100 + 0.5) / 100;
				temp[i][2] = temp[i][0] + temp[i][1];
				temp[i][2] = Math.floor(temp[i][2] * 100 + 0.5) / 100;
				break;
			} 
			//由于精度问题 最后一个月实际的本金会有差别 需要单独计算
			temp[i][1] = remains * mIns;
			temp[i][1] = Math.floor(temp[i][1] * 100 + 0.5) / 100;
			temp[i][2] = totalMoney / months;
			temp[i][2] = Math.floor(temp[i][2] * 100 + 0.5) / 100;
			temp[i][0] = temp[i][2] - temp[i][1];
			temp[i][0] = Math.floor(temp[i][0] * 100 + 0.5) / 100;
			remains -= temp[i][0];
		}
		//temp[][0]为每月还款本金 temp[][1]为每月还款利息 temp[][2]为每月还款总额
		detail = temp;
	}
	//等额本金
	public void EqualPrincipalMethod() {
		
		double mIns = yIns / 100 / 12; //月利率
		int months = (years * 12);
		double remains = loanMoney;
		double sum = 0; // 总计还款金额
		double temp[][] = new double[months][3];
		for (int i = 0; i < months; i++)
		{
			temp[i][0] = loanMoney / months;
			temp[i][0] = Math.floor(temp[i][0] * 100 + 0.5) / 100;
			temp[i][1] = remains * mIns;
			temp[i][1] = Math.floor(temp[i][1] * 100 + 0.5) / 100;
			remains -= temp[i][0];
			temp[i][2] = temp[i][0] + temp[i][1];
			temp[i][2] = Math.floor(temp[i][2] * 100 + 0.5) / 100;
			sum += temp[i][2];
		}
		//temp[][0]为每月还款本金 temp[][1]为每月还款利息 temp[][2]为每月还款总额
		detail = temp;
		totalMoney = sum;
		totalMoney = Math.floor(totalMoney * 100 + 0.5) / 100;
		totalInterests = totalMoney - loanMoney;
		totalInterests = Math.floor(totalInterests * 100 + 0.5) / 100;
	}

前端页面显示(layUI)
在这里插入图片描述
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章