`

某呗分期还款模拟

 
阅读更多
/**
 * 某呗计息还款规则说明实现
 * 
 * @return
 */
package jdongtech.jiebaiUtils;

import java.util.Arrays;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;

import jdongtech.interestUtils.AverageCapitalPlusInterestUtils;

public class normalRepay {
	public static void main(String[] args) {
		// 需要手动填写
		double invest = 120; // 本金
		int month = 6;     // 期数
		double yearRate = 14.4 / 100; // 年利率
		int acctOffsetDay = 15;
		int accountDay = 13;     // 账单日,蚂蚁会把账单日设置成借款当日
		// 发起借款当天
		Calendar lendDay = Calendar.getInstance();
		lendDay.set(Calendar.MONTH, 4);
		lendDay.set(Calendar.DAY_OF_MONTH, 13);

		double dateRate = yearRate / 360;
		int[] daysCount = new int[month];
		int IncreaseFlag = 0;
		Calendar lendCalOffset = (Calendar) lendDay.clone();
		lendCalOffset.add(Calendar.DATE, acctOffsetDay);
		Calendar accCal = (Calendar) lendDay.clone();
		accCal.set(Calendar.DAY_OF_MONTH, accountDay);
		Calendar accCalBegin = (Calendar) accCal.clone();
		if (lendCalOffset.before(accCal)) {
		} else {
			accCalBegin.add(Calendar.MONTH, 1);
			IncreaseFlag = 1;
		}
		Calendar accCalEnd = (Calendar) accCal.clone();
		accCalEnd.add(Calendar.MONTH, month-1);

		System.out.println(lendDay.getTime() + "借款日期");
		System.out.println(accCalBegin.getTime() + "开始");
		System.out.println(accCalEnd.getTime() + "结束");
		int daysLending = RepayUtils.daysOffset(lendDay, accCalEnd);
		System.out.println("借款经历" + daysLending + "天");

		Calendar accCalPerEnd = (Calendar) accCalBegin.clone();
		for (int i = 0; i < month; i++) {
			Calendar accCalPerBeg;
			if (i == 0) {
				accCalPerBeg = (Calendar) lendDay.clone();
			} else {
				accCalPerBeg = (Calendar) accCalPerEnd.clone();
				accCalPerBeg.add(Calendar.MONTH, -1);
			}

			int daysPer = RepayUtils.daysOffset(accCalPerBeg, accCalPerEnd);
			daysCount[i] = daysPer;
			accCalPerEnd.add(Calendar.MONTH, 1);
		}
		//dateRate=0.0003;
		getPerMonthPrincipalInterestBig(invest, dateRate, month, daysCount, IncreaseFlag);
	}

	/**
	 * 计算实际等额本息每月额度
	 * 
	 * @return
	 */
	public static double getPerMonthPrincipalInterestBig(double invest, double dateRate, int totalmonth, int[] daysCount,
			int IncreaseFlag) {
		IncreaseFlag = 1;
		double perMonthStandard = AverageCapitalPlusInterestUtils.getPerMonthPrincipalInterest(invest, dateRate * 360,
				totalmonth);
		
		double perMonthMax = perMonthStandard * 1.1;
		double[] PRperMonth = new double[totalmonth];
		double[] PperMonth = new double[totalmonth];
		double[] RperMonth = new double[totalmonth];
		double[] PLeftperMonth = new double[totalmonth];
		Map<Double, Double> lastCheckMap = new HashMap<Double, Double>();
		Map<Double, String> PLeftperMonthMap = new HashMap<Double, String>();
		Map<Double, String> PRperMonthMap = new HashMap<Double, String>();
		Map<Double, String> PperMonthMap = new HashMap<Double, String>();
		Map<Double, String> RperMonthMap = new HashMap<Double, String>();
		Map<Double, Double> sumPRMap = new HashMap<Double, Double>();
		Map<Double, Double> sumPMap = new HashMap<Double, Double>();
		Map<Double, Double> sumRMap = new HashMap<Double, Double>();

		if (IncreaseFlag == 1) {
			while (perMonthStandard < perMonthMax) {
				PRperMonth[0] = RepayUtils.num2second(perMonthStandard);
				PLeftperMonth[0] = RepayUtils.num2second(invest);
				RperMonth[0] = RepayUtils.num2secondDown(PLeftperMonth[0] * daysCount[0] * dateRate);
				PperMonth[0] = RepayUtils.num2second(PRperMonth[0] - RperMonth[0]);
				for (int j = 1; j < totalmonth; j++) {
					PRperMonth[j] = RepayUtils.num2second(perMonthStandard);
					PLeftperMonth[j] = RepayUtils.num2second(PLeftperMonth[j - 1] - PperMonth[j - 1]);
					RperMonth[j] = RepayUtils.num2secondDown(PLeftperMonth[j] * dateRate * daysCount[j]);
					PperMonth[j] = RepayUtils.num2second(PRperMonth[j] - RperMonth[j]);
					if (j == totalmonth - 1) {
						PperMonth[j] = RepayUtils.num2second(PLeftperMonth[j]);
						PRperMonth[j] = RepayUtils.num2second(PperMonth[j] + RperMonth[j]);
					}
				}
				double sumP = 0;
				double sumR = 0;
				double sumPR = 0;
				for (int i = 0; i < PLeftperMonth.length; i++) {
					sumP = sumP + PperMonth[i];
					sumR = sumR + RperMonth[i];
					sumPR = sumPR + PRperMonth[i];
				}
				lastCheckMap.put(RepayUtils.num2second(perMonthStandard),
						Math.abs(PRperMonth[totalmonth - 1] - PRperMonth[totalmonth - 2]));
				PLeftperMonthMap.put(RepayUtils.num2second(perMonthStandard), Arrays.toString(PLeftperMonth));
				PRperMonthMap.put(RepayUtils.num2second(perMonthStandard), Arrays.toString(PRperMonth));
				PperMonthMap.put(RepayUtils.num2second(perMonthStandard), Arrays.toString(PperMonth));
				RperMonthMap.put(RepayUtils.num2second(perMonthStandard), Arrays.toString(RperMonth));
				sumPRMap.put(RepayUtils.num2second(perMonthStandard), RepayUtils.num2second(sumPR));
				sumPMap.put(RepayUtils.num2second(perMonthStandard), RepayUtils.num2second(sumP));
				sumRMap.put(RepayUtils.num2second(perMonthStandard), RepayUtils.num2second(sumR));

				perMonthStandard = perMonthStandard + 0.01;
			}
		}

		Double resultKey = RepayUtils.getKeyByMinValue(lastCheckMap);

		System.out.println("等额本息每月还款额:" + resultKey);
		System.out.println("每期经历" + Arrays.toString(daysCount));
		System.out.println("每月余本金:" + PLeftperMonthMap.get(resultKey));
		System.out.println("每月还款额:" + PRperMonthMap.get(resultKey));
		System.out.println("每月还本金:" + PperMonthMap.get(resultKey));
		System.out.println("每月还利息:" + RperMonthMap.get(resultKey));
		System.out.println("总还款额:" + sumPRMap.get(resultKey));
		System.out.println("总还本金:" + sumPMap.get(resultKey));
		System.out.println("总还利息:" + sumRMap.get(resultKey));
		return resultKey;
	}

}
分享到:
评论

相关推荐

    分期卡原型v1.0.rar

    它是一种模拟真实信用卡或消费贷款服务的数字化设计,用户可以通过电子设备进行分期购物,享受零利息或低利率的优惠。在“分期卡原型v1.0”中,设计师可能关注于以下几个关键要素: 1. **用户界面(UI)设计**:UI...

    JS版分期付款计算器

    其中,本金是借款总额,月利率是年利率除以12(因为是按月计息),期数是还款的总月数。 在JavaScript中,我们可以创建一个函数来实现这个计算过程。例如,我们可以定义一个名为`calculateInstallment`的函数,接受...

    现金分期利率浅析.pptx

    例如,通过模拟不同的还款方式和利率组合,可以找出最经济的还款策略。 总结来说,现金分期利率的计算并非简单直观,它涉及到复杂的金融术语和数学模型。对这些概念的理解和应用是理财规划的关键,尤其是对于那些...

    购物-有用分期软件 v1.9.1.zip

    它可能包含教学课程、案例分析以及模拟实际购物体验,让学生在实践中学习如何进行分期付款,理解利息计算和还款计划等金融概念。 【标签】"教育教学"强调了这款应用的核心功能,即通过教学与实践相结合的方式,提高...

    JAVA GUI模拟购车还贷计算器

    【标签】"还贷计算器"是指能够计算分期还款金额的工具,通常包括本金、利息和还款周期等因素。在汽车购买中,贷款计算器可以帮助消费者了解贷款购车的经济负担,以便做出明智的购买决策。 【详细说明】 1. **Java ...

    住房贷款与分期偿还的数学模型收集.pdf

    解术霞在其著作中可能详细阐述了如何运用数学工具来模拟和分析住房贷款的分期偿还过程。 在购房时,贷款人通常会选择分期付款方式,即按月偿还本金和利息,直到贷款完全清偿。这个过程可以通过几种数学模型来描述,...

    购房贷款的分期付款中的计算问题借鉴.pdf

    4. **月供计算**:以贷款10万元,10年分期为例,假设月利率为4.65‰,则每期的还款额(X)可以通过以下等式计算: \( X \times \sum_{n=1}^{120}(1+0.00465)^n = 101.00465 \) 解得 \( X \approx 1089 \) 元,即每...

    EXCEL可视化数据看板-分期购车比Excel模板.zip

    8. 模拟运算表:通过Excel的模拟运算表,用户可以快速测试不同的假设情况,比如调整首付比例或贷款期限,观察对月供和总成本的影响。 9. 协作与共享:如果多人参与决策,Excel的共享工作簿功能允许团队成员同时编辑...

    制作贷款模拟运算表.ppt

    在企业经营过程中,贷款模拟运算表是一个至关重要的工具,它帮助企业预测和规划贷款的成本与...在实际应用中,还可以进一步扩展模拟运算表,考虑其他变量,如提前还款的可能性、市场利率波动等,以提高预测的准确性。

    利用Excel双变量模拟运算表进行购房贷款方案决策解读.docx

    利用 Excel 双变量模拟运算表进行购房贷款方案决策解读 本文介绍了如何使用 Excel 的 PMT 函数和双变量模拟运算表来计算和分析购房贷款的每期偿还额,以帮助购房者制定切实可行的贷款计划。PMT 函数可以计算投资或...

    办公自动化第5章制作贷款模拟运算表.ppt

    【办公自动化第5章制作贷款模拟运算表】的讲解主要涉及了如何利用Excel来创建一个单变量模拟运算表,以帮助企业管理者了解在不同银行利率下,贷款购置设备的月还款金额。以下是对这一主题的详细阐述: 1. **单变量...

    银行初级职业资格考试个人贷款模拟试题及答案四.pdf

    贷款可一次性或分期还款,但通常需在期限内循环使用,且不得用于投资或生产经营。 6. **互联网个人贷款**:互联网个人贷款以其流程线上化、审批快速、随借随还以及额度较低、期限较短的特点,为客户提供便捷的金融...

    Excel表格+Word文档各类各行业模板-投资收益模拟测算器.zip

    5. **现金流预测**:对于需要定期投入或产出的资金流,如租金收入或分期还款,Excel模板可以绘制现金流图。 6. **图表展示**:利用Excel的图表功能,将数据可视化,帮助用户更直观地理解投资表现。 7. **假设情景...

    Excel模板长期借款双变量模拟分析.zip

    在Excel中进行长期借款双变量模拟分析是一种常见且强大的金融工具,它可以帮助企业和个人理解贷款的成本、偿还策略以及不同变量如何影响最终结果。这个“长期借款双变量模拟分析”模板可能包含以下关键知识点: 1. ...

    TR_LM_002 贷款入帐流程操作手册范本.doc

    - 分期还款的每次操作,如第一次入账,可能需要将支付率调整为非100%,例如50%,表示50%的本金入账。第二次及后续入账操作类似,调整百分比支付率以反映实际还款情况。 4. **注意事项**: - 日期字段如付款日期、...

    {业务管理}实训七贷款业务某某某.pdf

    消费贷款则多为分期还款,同样可有多种信用方式。微小贷款不计息,而委托贷款和承兑垫款贷款一般是一次性偿还。 2. **贷款合同录入**:柜员在【5011合同录入】菜单下录入贷款合同,需注意结算账户的选择,特殊情况...

    java月供的源代码

    在这个项目中,学员将面临模拟计算不同期限(3年、5年、20年)的分期付款问题。 购房月供的计算涉及到金融领域的知识,主要包括本金、利息、还款期数和利率等因素。在Java编程中,我们可以通过编写函数或类来实现...

    ERP沙盘模拟大赛高手整理经验集.doc

    在长期贷款、短期贷款、高利贷方面,我们需要充分利用短贷的灵活性,根据企业资金的需要,分期短贷,这样可以减轻企业的还款压力。申请贷款时,我们需要注意一点:所有者权益*2=A,则:长贷,短贷,长短贷一定要分开...

    六年级数学上册模拟试卷3精选.doc

    8. 分期付款问题:理解等额本息还款方式,通过等式计算总价。 9. 时间和速度问题:结合汽车长度、速度和过人时间,计算追上行人的总时间。 10. 数学运算与比例问题:结合比例和速度,计算追及时间。 这些知识点覆盖...

Global site tag (gtag.js) - Google Analytics