等额本息:

  1. /**
  2. * Description:等额本息工具类
  3. * Copyright: Copyright (corporation)2015
  4. * Company: Corporation
  5. * @author: 凯文加内特
  6. * @version: 1.0
  7. * Created at: 2015年11月30日 下午3:45:46
  8. * Modification History:
  9. * Modified by :
  10. */
  11. package com.utils;
  12. import java.math.BigDecimal;
  13. import java.util.HashMap;
  14. import java.util.Map;
  15. /**
  16. * 等额本息还款,也称定期付息,即借款人每月按相等的金额偿还贷款本息,其中每月贷款利息按月初剩余贷款本金计算并逐月结清。把按揭贷款的本金总额与利息总额相加,
  17. * 然后平均分摊到还款期限的每个月中。作为还款人,每个月还给银行固定金额,但每月还款额中的本金比重逐月递增、利息比重逐月递减。
  18. */
  19. public class AverageCapitalPlusInterestUtils {
  20. /**
  21. * 等额本息计算获取还款方式为等额本息的每月偿还本金和利息
  22. *
  23. * 公式:每月偿还本息=〔贷款本金×月利率×(1+月利率)^还款月数〕÷〔(1+月利率)^还款月数-1〕
  24. *
  25. * @param invest
  26. * 总借款额(贷款本金)
  27. * @param yearRate
  28. * 年利率
  29. * @param month
  30. * 还款总月数
  31. * @return 每月偿还本金和利息,不四舍五入,直接截取小数点最后两位
  32. */
  33. public static double getPerMonthPrincipalInterest(double invest, double yearRate, int totalmonth) {
  34. double monthRate = yearRate / 12;
  35. BigDecimal monthIncome = new BigDecimal(invest)
  36. .multiply(new BigDecimal(monthRate * Math.pow(1 + monthRate, totalmonth)))
  37. .divide(new BigDecimal(Math.pow(1 + monthRate, totalmonth) - 1), 2, BigDecimal.ROUND_DOWN);
  38. return monthIncome.doubleValue();
  39. }
  40. /**
  41. * 等额本息计算获取还款方式为等额本息的每月偿还利息
  42. *
  43. * 公式:每月偿还利息=贷款本金×月利率×〔(1+月利率)^还款月数-(1+月利率)^(还款月序号-1)〕÷〔(1+月利率)^还款月数-1〕
  44. * @param invest
  45. * 总借款额(贷款本金)
  46. * @param yearRate
  47. * 年利率
  48. * @param month
  49. * 还款总月数
  50. * @return 每月偿还利息
  51. */
  52. public static Map<Integer, BigDecimal> getPerMonthInterest(double invest, double yearRate, int totalmonth) {
  53. Map<Integer, BigDecimal> map = new HashMap<Integer, BigDecimal>();
  54. double monthRate = yearRate/12;
  55. BigDecimal monthInterest;
  56. for (int i = 1; i < totalmonth + 1; i++) {
  57. BigDecimal multiply = new BigDecimal(invest).multiply(new BigDecimal(monthRate));
  58. BigDecimal sub = new BigDecimal(Math.pow(1 + monthRate, totalmonth)).subtract(new BigDecimal(Math.pow(1 + monthRate, i-1)));
  59. monthInterest = multiply.multiply(sub).divide(new BigDecimal(Math.pow(1 + monthRate, totalmonth) - 1), 6, BigDecimal.ROUND_DOWN);
  60. monthInterest = monthInterest.setScale(2, BigDecimal.ROUND_DOWN);
  61. map.put(i, monthInterest);
  62. }
  63. return map;
  64. }
  65. /**
  66. * 等额本息计算获取还款方式为等额本息的每月偿还本金
  67. *
  68. * @param invest
  69. * 总借款额(贷款本金)
  70. * @param yearRate
  71. * 年利率
  72. * @param month
  73. * 还款总月数
  74. * @return 每月偿还本金
  75. */
  76. public static Map<Integer, BigDecimal> getPerMonthPrincipal(double invest, double yearRate, int totalmonth) {
  77. double monthRate = yearRate / 12;
  78. BigDecimal monthIncome = new BigDecimal(invest)
  79. .multiply(new BigDecimal(monthRate * Math.pow(1 + monthRate, totalmonth)))
  80. .divide(new BigDecimal(Math.pow(1 + monthRate, totalmonth) - 1), 2, BigDecimal.ROUND_DOWN);
  81. Map<Integer, BigDecimal> mapInterest = getPerMonthInterest(invest, yearRate, totalmonth);
  82. Map<Integer, BigDecimal> mapPrincipal = new HashMap<Integer, BigDecimal>();
  83. for (Map.Entry<Integer, BigDecimal> entry : mapInterest.entrySet()) {
  84. mapPrincipal.put(entry.getKey(), monthIncome.subtract(entry.getValue()));
  85. }
  86. return mapPrincipal;
  87. }
  88. /**
  89. * 等额本息计算获取还款方式为等额本息的总利息
  90. *
  91. * @param invest
  92. * 总借款额(贷款本金)
  93. * @param yearRate
  94. * 年利率
  95. * @param month
  96. * 还款总月数
  97. * @return 总利息
  98. */
  99. public static double getInterestCount(double invest, double yearRate, int totalmonth) {
  100. BigDecimal count = new BigDecimal(0);
  101. Map<Integer, BigDecimal> mapInterest = getPerMonthInterest(invest, yearRate, totalmonth);
  102. for (Map.Entry<Integer, BigDecimal> entry : mapInterest.entrySet()) {
  103. count = count.add(entry.getValue());
  104. }
  105. return count.doubleValue();
  106. }
  107. /**
  108. * 应还本金总和
  109. * @param invest
  110. * 总借款额(贷款本金)
  111. * @param yearRate
  112. * 年利率
  113. * @param month
  114. * 还款总月数
  115. * @return 应还本金总和
  116. */
  117. public static double getPrincipalInterestCount(double invest, double yearRate, int totalmonth) {
  118. double monthRate = yearRate / 12;
  119. BigDecimal perMonthInterest = new BigDecimal(invest)
  120. .multiply(new BigDecimal(monthRate * Math.pow(1 + monthRate, totalmonth)))
  121. .divide(new BigDecimal(Math.pow(1 + monthRate, totalmonth) - 1), 2, BigDecimal.ROUND_DOWN);
  122. BigDecimal count = perMonthInterest.multiply(new BigDecimal(totalmonth));
  123. count = count.setScale(2, BigDecimal.ROUND_DOWN);
  124. return count.doubleValue();
  125. }
  126. /**
  127. * @param args
  128. */
  129. public static void main(String[] args) {
  130. double invest = 20000; // 本金
  131. int month = 12;
  132. double yearRate = 0.15; // 年利率
  133. double perMonthPrincipalInterest = getPerMonthPrincipalInterest(invest, yearRate, month);
  134. System.out.println(“等额本息—每月还款本息:” + perMonthPrincipalInterest);
  135. Map<Integer, BigDecimal> mapInterest = getPerMonthInterest(invest, yearRate, month);
  136. System.out.println(“等额本息—每月还款利息:” + mapInterest);
  137. Map<Integer, BigDecimal> mapPrincipal = getPerMonthPrincipal(invest, yearRate, month);
  138. System.out.println(“等额本息—每月还款本金:” + mapPrincipal);
  139. double count = getInterestCount(invest, yearRate, month);
  140. System.out.println(“等额本息—总利息:” + count);
  141. double principalInterestCount = getPrincipalInterestCount(invest, yearRate, month);
  142. System.out.println(“等额本息—应还本息总和:” + principalInterestCount);
  143. }
  144. }

等额本金:

  1. /**
  2. * Description:等额本金工具类
  3. * Copyright: Copyright (Corporation)2015
  4. * Company: Corporation
  5. * @author: 凯文加内特
  6. * @version: 1.0
  7. * Created at: 2015年12月1日 上午8:38:23
  8. * Modification History:
  9. * Modified by :
  10. */
  11. package com.utils;
  12. import java.math.BigDecimal;
  13. import java.util.HashMap;
  14. import java.util.Map;
  15. /**
  16. * 等额本金是指一种贷款的还款方式,是在还款期内把贷款数总额等分,每月偿还同等数额的本金和剩余贷款在该月所产生的利息,这样由于每月的还款本金额固定,
  17. * 而利息越来越少,借款人起初还款压力较大,但是随时间的推移每月还款数也越来越少。
  18. */
  19. public class AverageCapitalUtils {
  20. /**
  21. * 等额本金计算获取还款方式为等额本金的每月偿还本金和利息
  22. *
  23. * 公式:每月偿还本金=(贷款本金÷还款月数)+(贷款本金-已归还本金累计额)×月利率
  24. *
  25. * @param invest
  26. * 总借款额(贷款本金)
  27. * @param yearRate
  28. * 年利率
  29. * @param month
  30. * 还款总月数
  31. * @return 每月偿还本金和利息,不四舍五入,直接截取小数点最后两位
  32. */
  33. public static Map<Integer, Double> getPerMonthPrincipalInterest(double invest, double yearRate, int totalMonth) {
  34. Map<Integer, Double> map = new HashMap<Integer, Double>();
  35. // 每月本金
  36. double monthPri = getPerMonthPrincipal(invest, totalMonth);
  37. // 获取月利率
  38. double monthRate = yearRate / 12;
  39. monthRate = new BigDecimal(monthRate).setScale(6, BigDecimal.ROUND_DOWN).doubleValue();
  40. for (int i = 1; i <= totalMonth; i++) {
  41. double monthRes = monthPri + (invest - monthPri * (i - 1)) * monthRate;
  42. monthRes = new BigDecimal(monthRes).setScale(2, BigDecimal.ROUND_DOWN).doubleValue();
  43. map.put(i, monthRes);
  44. }
  45. return map;
  46. }
  47. /**
  48. * 等额本金计算获取还款方式为等额本金的每月偿还利息
  49. *
  50. * 公式:每月应还利息=剩余本金×月利率=(贷款本金-已归还本金累计额)×月利率
  51. *
  52. * @param invest
  53. * 总借款额(贷款本金)
  54. * @param yearRate
  55. * 年利率
  56. * @param month
  57. * 还款总月数
  58. * @return 每月偿还利息
  59. */
  60. public static Map<Integer, Double> getPerMonthInterest(double invest, double yearRate, int totalMonth) {
  61. Map<Integer, Double> inMap = new HashMap<Integer, Double>();
  62. double principal = getPerMonthPrincipal(invest, totalMonth);
  63. Map<Integer, Double> map = getPerMonthPrincipalInterest(invest, yearRate, totalMonth);
  64. for (Map.Entry<Integer, Double> entry : map.entrySet()) {
  65. BigDecimal principalBigDecimal = new BigDecimal(principal);
  66. BigDecimal principalInterestBigDecimal = new BigDecimal(entry.getValue());
  67. BigDecimal interestBigDecimal = principalInterestBigDecimal.subtract(principalBigDecimal);
  68. interestBigDecimal = interestBigDecimal.setScale(2, BigDecimal.ROUND_DOWN);
  69. inMap.put(entry.getKey(), interestBigDecimal.doubleValue());
  70. }
  71. return inMap;
  72. }
  73. /**
  74. * 等额本金计算获取还款方式为等额本金的每月偿还本金
  75. *
  76. * 公式:每月应还本金=贷款本金÷还款月数
  77. *
  78. * @param invest
  79. * 总借款额(贷款本金)
  80. * @param yearRate
  81. * 年利率
  82. * @param month
  83. * 还款总月数
  84. * @return 每月偿还本金
  85. */
  86. public static double getPerMonthPrincipal(double invest, int totalMonth) {
  87. BigDecimal monthIncome = new BigDecimal(invest).divide(new BigDecimal(totalMonth), 2, BigDecimal.ROUND_DOWN);
  88. return monthIncome.doubleValue();
  89. }
  90. /**
  91. * 等额本金计算获取还款方式为等额本金的总利息
  92. *
  93. * @param invest
  94. * 总借款额(贷款本金)
  95. * @param yearRate
  96. * 年利率
  97. * @param month
  98. * 还款总月数
  99. * @return 总利息
  100. */
  101. public static double getInterestCount(double invest, double yearRate, int totalMonth) {
  102. BigDecimal count = new BigDecimal(0);
  103. Map<Integer, Double> mapInterest = getPerMonthInterest(invest, yearRate, totalMonth);
  104. for (Map.Entry<Integer, Double> entry : mapInterest.entrySet()) {
  105. count = count.add(new BigDecimal(entry.getValue()));
  106. }
  107. return count.doubleValue();
  108. }
  109. /**
  110. * @param args
  111. */
  112. public static void main(String[] args) {
  113. double invest = 10000; // 本金
  114. int month = 12;
  115. double yearRate = 0.15; // 年利率
  116. Map<Integer, Double> getPerMonthPrincipalInterest = getPerMonthPrincipalInterest(invest, yearRate, month);
  117. System.out.println("等额本金---每月本息:" + getPerMonthPrincipalInterest);
  118. double benjin = getPerMonthPrincipal(invest, month);
  119. System.out.println("等额本金---每月本金:" + benjin);
  120. Map<Integer, Double> mapInterest = getPerMonthInterest(invest, yearRate, month);
  121. System.out.println("等额本金---每月利息:" + mapInterest);
  122. double count = getInterestCount(invest, yearRate, month);
  123. System.out.println("等额本金---总利息:" + count);
  124. }
  125. }

转自:https://blog.csdn.net/wzygis/article/details/51809575

等额本金、等额本息工具类(Java版)相关推荐

  1. 贷款计算器- 等额本金、等额本息工具类(Java版)

    /** * Description:等额本金工具类 * Copyright: Copyright (Corporation)2015 * Company: Corporation * @version ...

  2. 腾讯开放平台接口鉴权(计算签名)工具类 java版

    腾讯开放平台 接口鉴权(签名)工具类 java版 用到了Hutool工具类 package top.seasmall.platform.core.config.nettyws.util;import ...

  3. 方差计算工具类--Java版

    方差的计算,如果不太计较精度的话,可以使用 Apache 的 commons-math3(http://commons.apache.org/proper/commons-math/)提供的 Vari ...

  4. 坐标系转换工具类Java版Js版

    Java版本: public class GPSUtils {private static double x_pi = 3.14159265358979324 * 3000.0 / 180.0;// ...

  5. java 等额本金等额本息工具类

    2019独角兽企业重金招聘Python工程师标准>>> 等额本息: /*** Description:等额本息工具类* Copyright: Copyright (corporati ...

  6. 等额本金等额本息工具类2023

    等额本金&等额本息工具类2023 等额本金 等额本金 问题反馈 等额本金 import java.math.BigDecimal; import java.math.RoundingMode; ...

  7. SHA1签名工具类java

    SHA1签名工具类java package com.net.util;import java.security.MessageDigest; import java.util.Iterator; im ...

  8. 自定义日期工具类 java 1614698552

    自定义日期工具类 java 1614698552 需求 思路 演练 日期转字符串的方法 字符串转日期方法 测试类 更多尝试 测试另一个方法

  9. 财务转换工具 - 人民币金额转大写工具类 java 版本

    文章目录 财务转换工具 - 人民币金额转大写工具类 java 版本 1.示例 2.代码 财务转换工具 - 人民币金额转大写工具类 java 版本 1.示例 public static void mai ...

最新文章

  1. Java实现网页截屏功能(基于phantomJs)
  2. 08 - JavaSE之IO流
  3. 5张图搞懂Java深浅拷贝
  4. boost::hana::sfinae用法的测试程序
  5. 在服务器上使用第三方独立组件对Word/Excel进行编程
  6. gj9 迭代器和生成器
  7. python爬虫06 | 你的第一个爬虫,爬取当当网 Top 500 本五星好评书籍
  8. 云服务器 ECS CentOS 7配置默认防火墙 Firewall
  9. 构造函数不能为虚函数
  10. gitkraken同步建立repository与github上的repository
  11. sql 整改措施 注入_SQL注入入侵防范措施
  12. 设计灵感|App中的页面空状态应该如何表现?
  13. ActiveReports 9实战教程(3): 图文并茂的报表形式
  14. C++课设:GUI电话簿程序
  15. 标签thead与th的区别
  16. 2进制 16进制 计算机术语,十六进制转二进制计算器
  17. 中小学python编程教学-中小学青少年编程课程
  18. 概率论 1.3 古典概型与几何概型
  19. 微信消息提醒python实现
  20. 大数据算法识别高自杀风险人群?准确率高得吓人

热门文章

  1. 中国“千禧一代”是一群什么样的消费者?
  2. 英语语言学论文选题 计算机,88个英语语言学、语言论文题目选题参考
  3. 云影数码工作室-创业计划书
  4. 极客日报:vivo投资超49亿元建人才房;马斯克承认完全自动驾驶 “不是很好”;Edge浏览器出现无法关闭的广告
  5. ML01 -- KNN算法
  6. Third1: Basic Web applications BASIC NFS services triggering mount | Cloud computing
  7. eslint : 无法加载文件 C:\Users\user\AppData\Roaming\npm\eslint.ps1
  8. 金九银十的你准备好了吗?Python 100道基础面试题先收藏!【附答案】
  9. 2508.笨拙的手指(进制转化+巧用异或运算)
  10. 计算机毕业设计JAVA二手物品置换平台mybatis+源码+调试部署+系统+数据库+lw