借呗分期还款模拟

Java代码

  1. /**
  2. * 阿里借呗计息还款规则说明实现
  3. *
  4. * @return
  5. */
  6. package jdongtech.jiebaiUtils;
  7. import java.util.Arrays;
  8. import java.util.Calendar;
  9. import java.util.HashMap;
  10. import java.util.Map;
  11. import jdongtech.interestUtils.AverageCapitalPlusInterestUtils;
  12. public class normalRepay {
  13. public static void main(String[] args) {
  14. // 需要手动填写
  15. double invest = 120; // 本金
  16. int month = 6;     // 期数
  17. double yearRate = 14.4 / 100; // 年利率
  18. int acctOffsetDay = 15;
  19. int accountDay = 13;     // 账单日,蚂蚁会把账单日设置成借款当日
  20. // 发起借款当天
  21. Calendar lendDay = Calendar.getInstance();
  22. lendDay.set(Calendar.MONTH, 4);
  23. lendDay.set(Calendar.DAY_OF_MONTH, 13);
  24. double dateRate = yearRate / 360;
  25. int[] daysCount = new int[month];
  26. int IncreaseFlag = 0;
  27. Calendar lendCalOffset = (Calendar) lendDay.clone();
  28. lendCalOffset.add(Calendar.DATE, acctOffsetDay);
  29. Calendar accCal = (Calendar) lendDay.clone();
  30. accCal.set(Calendar.DAY_OF_MONTH, accountDay);
  31. Calendar accCalBegin = (Calendar) accCal.clone();
  32. if (lendCalOffset.before(accCal)) {
  33. } else {
  34. accCalBegin.add(Calendar.MONTH, 1);
  35. IncreaseFlag = 1;
  36. }
  37. Calendar accCalEnd = (Calendar) accCal.clone();
  38. accCalEnd.add(Calendar.MONTH, month-1);
  39. System.out.println(lendDay.getTime() + "借款日期");
  40. System.out.println(accCalBegin.getTime() + "开始");
  41. System.out.println(accCalEnd.getTime() + "结束");
  42. int daysLending = RepayUtils.daysOffset(lendDay, accCalEnd);
  43. System.out.println("借款经历" + daysLending + "天");
  44. Calendar accCalPerEnd = (Calendar) accCalBegin.clone();
  45. for (int i = 0; i < month; i++) {
  46. Calendar accCalPerBeg;
  47. if (i == 0) {
  48. accCalPerBeg = (Calendar) lendDay.clone();
  49. } else {
  50. accCalPerBeg = (Calendar) accCalPerEnd.clone();
  51. accCalPerBeg.add(Calendar.MONTH, -1);
  52. }
  53. int daysPer = RepayUtils.daysOffset(accCalPerBeg, accCalPerEnd);
  54. daysCount[i] = daysPer;
  55. accCalPerEnd.add(Calendar.MONTH, 1);
  56. }
  57. //dateRate=0.0003;
  58. getPerMonthPrincipalInterestBig(invest, dateRate, month, daysCount, IncreaseFlag);
  59. }
  60. /**
  61. * 计算实际等额本息每月额度
  62. *
  63. * @return
  64. */
  65. public static double getPerMonthPrincipalInterestBig(double invest, double dateRate, int totalmonth, int[] daysCount,
  66. int IncreaseFlag) {
  67. IncreaseFlag = 1;
  68. double perMonthStandard = AverageCapitalPlusInterestUtils.getPerMonthPrincipalInterest(invest, dateRate * 360,
  69. totalmonth);
  70. double perMonthMax = perMonthStandard * 1.1;
  71. double[] PRperMonth = new double[totalmonth];
  72. double[] PperMonth = new double[totalmonth];
  73. double[] RperMonth = new double[totalmonth];
  74. double[] PLeftperMonth = new double[totalmonth];
  75. Map<Double, Double> lastCheckMap = new HashMap<Double, Double>();
  76. Map<Double, String> PLeftperMonthMap = new HashMap<Double, String>();
  77. Map<Double, String> PRperMonthMap = new HashMap<Double, String>();
  78. Map<Double, String> PperMonthMap = new HashMap<Double, String>();
  79. Map<Double, String> RperMonthMap = new HashMap<Double, String>();
  80. Map<Double, Double> sumPRMap = new HashMap<Double, Double>();
  81. Map<Double, Double> sumPMap = new HashMap<Double, Double>();
  82. Map<Double, Double> sumRMap = new HashMap<Double, Double>();
  83. if (IncreaseFlag == 1) {
  84. while (perMonthStandard < perMonthMax) {
  85. PRperMonth[0] = RepayUtils.num2second(perMonthStandard);
  86. PLeftperMonth[0] = RepayUtils.num2second(invest);
  87. RperMonth[0] = RepayUtils.num2secondDown(PLeftperMonth[0] * daysCount[0] * dateRate);
  88. PperMonth[0] = RepayUtils.num2second(PRperMonth[0] - RperMonth[0]);
  89. for (int j = 1; j < totalmonth; j++) {
  90. PRperMonth[j] = RepayUtils.num2second(perMonthStandard);
  91. PLeftperMonth[j] = RepayUtils.num2second(PLeftperMonth[j - 1] - PperMonth[j - 1]);
  92. RperMonth[j] = RepayUtils.num2secondDown(PLeftperMonth[j] * dateRate * daysCount[j]);
  93. PperMonth[j] = RepayUtils.num2second(PRperMonth[j] - RperMonth[j]);
  94. if (j == totalmonth - 1) {
  95. PperMonth[j] = RepayUtils.num2second(PLeftperMonth[j]);
  96. PRperMonth[j] = RepayUtils.num2second(PperMonth[j] + RperMonth[j]);
  97. }
  98. }
  99. double sumP = 0;
  100. double sumR = 0;
  101. double sumPR = 0;
  102. for (int i = 0; i < PLeftperMonth.length; i++) {
  103. sumP = sumP + PperMonth[i];
  104. sumR = sumR + RperMonth[i];
  105. sumPR = sumPR + PRperMonth[i];
  106. }
  107. lastCheckMap.put(RepayUtils.num2second(perMonthStandard),
  108. Math.abs(PRperMonth[totalmonth - 1] - PRperMonth[totalmonth - 2]));
  109. PLeftperMonthMap.put(RepayUtils.num2second(perMonthStandard), Arrays.toString(PLeftperMonth));
  110. PRperMonthMap.put(RepayUtils.num2second(perMonthStandard), Arrays.toString(PRperMonth));
  111. PperMonthMap.put(RepayUtils.num2second(perMonthStandard), Arrays.toString(PperMonth));
  112. RperMonthMap.put(RepayUtils.num2second(perMonthStandard), Arrays.toString(RperMonth));
  113. sumPRMap.put(RepayUtils.num2second(perMonthStandard), RepayUtils.num2second(sumPR));
  114. sumPMap.put(RepayUtils.num2second(perMonthStandard), RepayUtils.num2second(sumP));
  115. sumRMap.put(RepayUtils.num2second(perMonthStandard), RepayUtils.num2second(sumR));
  116. perMonthStandard = perMonthStandard + 0.01;
  117. }
  118. }
  119. Double resultKey = RepayUtils.getKeyByMinValue(lastCheckMap);
  120. System.out.println("等额本息每月还款额:" + resultKey);
  121. System.out.println("每期经历" + Arrays.toString(daysCount));
  122. System.out.println("每月余本金:" + PLeftperMonthMap.get(resultKey));
  123. System.out.println("每月还款额:" + PRperMonthMap.get(resultKey));
  124. System.out.println("每月还本金:" + PperMonthMap.get(resultKey));
  125. System.out.println("每月还利息:" + RperMonthMap.get(resultKey));
  126. System.out.println("总还款额:" + sumPRMap.get(resultKey));
  127. System.out.println("总还本金:" + sumPMap.get(resultKey));
  128. System.out.println("总还利息:" + sumRMap.get(resultKey));
  129. return resultKey;
  130. }
  131. }
时间: 2024-08-05 03:14:26

借呗分期还款模拟的相关文章

校园分期市场的机遇与风险

NO1: 随着我国市场经济的发展,许多商家已经不满足仅仅通过定点.定时销售商品,他们需要创造市场,而大学就像是一块未经开发的土地,引得众多商家纷纷驻足.校园分期市场便是这些创新途径中的一种,那么为什么会出现这样一种销售途径,并且还为广大学生所接受呢?我们就不得不分析大学生这个群体的特点. 大学生是尚未走进社会一个大群体,生活来源基本依靠每月父母的供给,或者奖学金和兼职.他们中的多数来自工薪和农村家庭,因此生活费不会太丰厚.当然,富二代等特殊人群不在我们的讨论范围内.然而大多数大学生对电子产品有天

某呗提前还款模拟

/** * 阿里借呗计息还款规则说明实现 * * 测试阿里案例和韩哥案例通过 * @return */ package jdongtech.jiebaiUtils; import java.util.Arrays; import java.util.Calendar; import java.util.HashMap; import java.util.Map; import jdongtech.interestUtils.AverageCapitalPlusInterestUtils; pub

智能还款系统软件定制

真的是深层次分析.很多人不明白为什么信用卡智能还款软件能跑火.总说,钱不够,我分期就好了呀,我还款额就好了啊 殊不知,这都是大坑.你见过哪个玩卡高手,会分期,会还款.不去做信用卡分期,不去做信用卡还款额.才是让信用卡智能还款app跑火的根本原因. 分析开始: 假设一张2万额度的信用卡(为啥用2万做举例啊?我开心,行不行--),但是你穷啊没钱啊,这个时候你不用智能还款,只能用还款额去还款(分期就不探讨了,分期还得另外再加手续费,只会更惨).我们看看会是啥后果! 首先这里涉及了两个概念,一个是还款额

理财一年原创工具

回想起进入理财这道大门,是一个很偶然的机会,但是,这也成为了我人生的转折点! 去年6月以前,我们家的财务,都是由老婆来管理.但是老婆对财务不是很敏感,我偶尔问她,我们现在存了多少钱了?她总说,大概……可能……是…….后来,因为大多数家庭都是老婆理财,所以我让她去学习理财.钱虽然不多,但是也要好好管理起来.没想到她非常反感理财.基金这些事情,不愿去做,让我自己去学.我也不想,但是骨子里还是知道这件事情非常重要,所以没办法,自己学吧!万万没想到,学习理财后,我的金钱观.成功观都发生了重大的改变. 我

鸿学金信风控具体介绍

风控是金融业中最关键最核心的部分,对于互联网金融来说也不例外,风控的终于目的是要保证借出去的款能按时收回,把坏帐率控制在一定的范围之内. 鸿学金信很重视风控,我们的风控目标是把坏帐率控制在2%以内,达到银行级别的风控水平.鸿学金信针对所服务的专业细分市场特点,建立了一套针对教育培训行业借款用户的动态风控体系. 风控工作融入贷前贷中及贷后的每个环节中,达到对平台坏帐率的有效控制.相对于其他的综合性质业务的平台.鸿学金信这样的专业细分市场服务平台的风控做起来相对简单一点. 1.鸿学金信平台借款产品的

汽车后市场六大模式逐鹿互联网金融,腥风血雨再起

汽车后市场发展到今天,从洗车.保养.美容.二手车交易.维修……每一个领域都涌现出了无数的O2O创业者,但是现实总是残酷的,大量的创业者一股热血涌入进去没多久就被拍倒在沙滩上.当然,在这股互联网+大风的吹拂下,还是涌现了不少优秀的汽车后市场创业团队,并且不断有新的游戏参与者加入. 汽车互联网金融作为汽车后市场非常重要的一块,眼下这场好戏才刚刚开始.从各条小路杀出来的选手正在开始汇集,他们将共同角逐这片新的天地. 一.C2C综合服务平台模式 与很多二手车交易平台一样,汽车后市场的C2C平台模式能直指

5年开发不如新人,反例何其多,望君惜前路

最怕不过是不知道到自己想要什么,又无法安心做好眼下的事,最后一无所获.-洛夫斯基.小作 小作,90后,高中毕业后,在三本与职业培训中抉择,最终进入了IT行业名声相当不好的培训机构. 两年不到的培训时间,三个学期,近四万的学费,学习了网页制作,数据库操作,C#,JAVA等相关技术. 毕业季,小作陆续参加学校推荐的几个公司面试,有包吃住远在郊区工厂的2k的工作,有各种外包公司2k5,3k的工作,有各种校友创业开的小公司. 最后选择了一家规模不到20人的旅游系统公司,不包吃不包住,月薪3k,就这样开启

Day5作业,商城+ATM机+后台管理

晚来了....东西太多,需要写的blog内容太多,re讲的渣渣,不明白为什么oldboy经常换老师,吐槽下吧,真心不爱了.... github地址在这:https://github.com/ccorzorz/ATM-shoppmall 商城用原来的,先上图吧: 商城图: ATM后台管理: ATM终端: README: 1.测试帐号: 商城测试帐号:cc/123 或者自己注册 ATM 终端测试帐号:cc/123 alex/123 或者自己注册 ATM 管理员测试帐号:admin/admin 2.需

农村金融现状及改革措施探讨

摘要:我国农村金融发展相对滞后,这是由我国金融体系的结构性失调和三农问题相互作用的结果.我们应将改善农村金融服务作为解决三农问题的突破口,明确各方主体的责任义务,积极稳妥的推进农村金融建设,从而可以从底层推动经济和社会的发展. 关键词:农村金融,银行,完善,创新 农 村金融是我国金融体系的重要组成部分,需要从两个维度去考量农村金融的重要性.一是从金融体系的角度,一个完善健康良好的金融体系应该是服务于全社会各产 业的普惠民生的金融体系,具备拉动各个产业协调发展,促进金融资源公平分配的能力.二是明确