等额本金、等额本息工具类(Java版)
等额本息:
- /**
- * Description:等额本息工具类
- * Copyright: Copyright (corporation)2015
- * Company: Corporation
- * @author: 凯文加内特
- * @version: 1.0
- * Created at: 2015年11月30日 下午3:45:46
- * Modification History:
- * Modified by :
- */
- package com.utils;
- import java.math.BigDecimal;
- import java.util.HashMap;
- import java.util.Map;
- /**
- * 等额本息还款,也称定期付息,即借款人每月按相等的金额偿还贷款本息,其中每月贷款利息按月初剩余贷款本金计算并逐月结清。把按揭贷款的本金总额与利息总额相加,
- * 然后平均分摊到还款期限的每个月中。作为还款人,每个月还给银行固定金额,但每月还款额中的本金比重逐月递增、利息比重逐月递减。
- */
- public class AverageCapitalPlusInterestUtils {
- /**
- * 等额本息计算获取还款方式为等额本息的每月偿还本金和利息
- *
- * 公式:每月偿还本息=〔贷款本金×月利率×(1+月利率)^还款月数〕÷〔(1+月利率)^还款月数-1〕
- *
- * @param invest
- * 总借款额(贷款本金)
- * @param yearRate
- * 年利率
- * @param month
- * 还款总月数
- * @return 每月偿还本金和利息,不四舍五入,直接截取小数点最后两位
- */
- public static double getPerMonthPrincipalInterest(double invest, double yearRate, int totalmonth) {
- double monthRate = yearRate / 12;
- BigDecimal monthIncome = new BigDecimal(invest)
- .multiply(new BigDecimal(monthRate * Math.pow(1 + monthRate, totalmonth)))
- .divide(new BigDecimal(Math.pow(1 + monthRate, totalmonth) - 1), 2, BigDecimal.ROUND_DOWN);
- return monthIncome.doubleValue();
- }
- /**
- * 等额本息计算获取还款方式为等额本息的每月偿还利息
- *
- * 公式:每月偿还利息=贷款本金×月利率×〔(1+月利率)^还款月数-(1+月利率)^(还款月序号-1)〕÷〔(1+月利率)^还款月数-1〕
- * @param invest
- * 总借款额(贷款本金)
- * @param yearRate
- * 年利率
- * @param month
- * 还款总月数
- * @return 每月偿还利息
- */
- public static Map<Integer, BigDecimal> getPerMonthInterest(double invest, double yearRate, int totalmonth) {
- Map<Integer, BigDecimal> map = new HashMap<Integer, BigDecimal>();
- double monthRate = yearRate/12;
- BigDecimal monthInterest;
- for (int i = 1; i < totalmonth + 1; i++) {
- BigDecimal multiply = new BigDecimal(invest).multiply(new BigDecimal(monthRate));
- BigDecimal sub = new BigDecimal(Math.pow(1 + monthRate, totalmonth)).subtract(new BigDecimal(Math.pow(1 + monthRate, i-1)));
- monthInterest = multiply.multiply(sub).divide(new BigDecimal(Math.pow(1 + monthRate, totalmonth) - 1), 6, BigDecimal.ROUND_DOWN);
- monthInterest = monthInterest.setScale(2, BigDecimal.ROUND_DOWN);
- map.put(i, monthInterest);
- }
- return map;
- }
- /**
- * 等额本息计算获取还款方式为等额本息的每月偿还本金
- *
- * @param invest
- * 总借款额(贷款本金)
- * @param yearRate
- * 年利率
- * @param month
- * 还款总月数
- * @return 每月偿还本金
- */
- public static Map<Integer, BigDecimal> getPerMonthPrincipal(double invest, double yearRate, int totalmonth) {
- double monthRate = yearRate / 12;
- BigDecimal monthIncome = new BigDecimal(invest)
- .multiply(new BigDecimal(monthRate * Math.pow(1 + monthRate, totalmonth)))
- .divide(new BigDecimal(Math.pow(1 + monthRate, totalmonth) - 1), 2, BigDecimal.ROUND_DOWN);
- Map<Integer, BigDecimal> mapInterest = getPerMonthInterest(invest, yearRate, totalmonth);
- Map<Integer, BigDecimal> mapPrincipal = new HashMap<Integer, BigDecimal>();
- for (Map.Entry<Integer, BigDecimal> entry : mapInterest.entrySet()) {
- mapPrincipal.put(entry.getKey(), monthIncome.subtract(entry.getValue()));
- }
- return mapPrincipal;
- }
- /**
- * 等额本息计算获取还款方式为等额本息的总利息
- *
- * @param invest
- * 总借款额(贷款本金)
- * @param yearRate
- * 年利率
- * @param month
- * 还款总月数
- * @return 总利息
- */
- public static double getInterestCount(double invest, double yearRate, int totalmonth) {
- BigDecimal count = new BigDecimal(0);
- Map<Integer, BigDecimal> mapInterest = getPerMonthInterest(invest, yearRate, totalmonth);
- for (Map.Entry<Integer, BigDecimal> entry : mapInterest.entrySet()) {
- count = count.add(entry.getValue());
- }
- return count.doubleValue();
- }
- /**
- * 应还本金总和
- * @param invest
- * 总借款额(贷款本金)
- * @param yearRate
- * 年利率
- * @param month
- * 还款总月数
- * @return 应还本金总和
- */
- public static double getPrincipalInterestCount(double invest, double yearRate, int totalmonth) {
- double monthRate = yearRate / 12;
- BigDecimal perMonthInterest = new BigDecimal(invest)
- .multiply(new BigDecimal(monthRate * Math.pow(1 + monthRate, totalmonth)))
- .divide(new BigDecimal(Math.pow(1 + monthRate, totalmonth) - 1), 2, BigDecimal.ROUND_DOWN);
- BigDecimal count = perMonthInterest.multiply(new BigDecimal(totalmonth));
- count = count.setScale(2, BigDecimal.ROUND_DOWN);
- return count.doubleValue();
- }
- /**
- * @param args
- */
- public static void main(String[] args) {
- double invest = 20000; // 本金
- int month = 12;
- double yearRate = 0.15; // 年利率
- double perMonthPrincipalInterest = getPerMonthPrincipalInterest(invest, yearRate, month);
- System.out.println(“等额本息—每月还款本息:” + perMonthPrincipalInterest);
- Map<Integer, BigDecimal> mapInterest = getPerMonthInterest(invest, yearRate, month);
- System.out.println(“等额本息—每月还款利息:” + mapInterest);
- Map<Integer, BigDecimal> mapPrincipal = getPerMonthPrincipal(invest, yearRate, month);
- System.out.println(“等额本息—每月还款本金:” + mapPrincipal);
- double count = getInterestCount(invest, yearRate, month);
- System.out.println(“等额本息—总利息:” + count);
- double principalInterestCount = getPrincipalInterestCount(invest, yearRate, month);
- System.out.println(“等额本息—应还本息总和:” + principalInterestCount);
- }
- }
等额本金:
- /**
- * Description:等额本金工具类
- * Copyright: Copyright (Corporation)2015
- * Company: Corporation
- * @author: 凯文加内特
- * @version: 1.0
- * Created at: 2015年12月1日 上午8:38:23
- * Modification History:
- * Modified by :
- */
- package com.utils;
- import java.math.BigDecimal;
- import java.util.HashMap;
- import java.util.Map;
- /**
- * 等额本金是指一种贷款的还款方式,是在还款期内把贷款数总额等分,每月偿还同等数额的本金和剩余贷款在该月所产生的利息,这样由于每月的还款本金额固定,
- * 而利息越来越少,借款人起初还款压力较大,但是随时间的推移每月还款数也越来越少。
- */
- public class AverageCapitalUtils {
- /**
- * 等额本金计算获取还款方式为等额本金的每月偿还本金和利息
- *
- * 公式:每月偿还本金=(贷款本金÷还款月数)+(贷款本金-已归还本金累计额)×月利率
- *
- * @param invest
- * 总借款额(贷款本金)
- * @param yearRate
- * 年利率
- * @param month
- * 还款总月数
- * @return 每月偿还本金和利息,不四舍五入,直接截取小数点最后两位
- */
- public static Map<Integer, Double> getPerMonthPrincipalInterest(double invest, double yearRate, int totalMonth) {
- Map<Integer, Double> map = new HashMap<Integer, Double>();
- // 每月本金
- double monthPri = getPerMonthPrincipal(invest, totalMonth);
- // 获取月利率
- double monthRate = yearRate / 12;
- monthRate = new BigDecimal(monthRate).setScale(6, BigDecimal.ROUND_DOWN).doubleValue();
- for (int i = 1; i <= totalMonth; i++) {
- double monthRes = monthPri + (invest - monthPri * (i - 1)) * monthRate;
- monthRes = new BigDecimal(monthRes).setScale(2, BigDecimal.ROUND_DOWN).doubleValue();
- map.put(i, monthRes);
- }
- return map;
- }
- /**
- * 等额本金计算获取还款方式为等额本金的每月偿还利息
- *
- * 公式:每月应还利息=剩余本金×月利率=(贷款本金-已归还本金累计额)×月利率
- *
- * @param invest
- * 总借款额(贷款本金)
- * @param yearRate
- * 年利率
- * @param month
- * 还款总月数
- * @return 每月偿还利息
- */
- public static Map<Integer, Double> getPerMonthInterest(double invest, double yearRate, int totalMonth) {
- Map<Integer, Double> inMap = new HashMap<Integer, Double>();
- double principal = getPerMonthPrincipal(invest, totalMonth);
- Map<Integer, Double> map = getPerMonthPrincipalInterest(invest, yearRate, totalMonth);
- for (Map.Entry<Integer, Double> entry : map.entrySet()) {
- BigDecimal principalBigDecimal = new BigDecimal(principal);
- BigDecimal principalInterestBigDecimal = new BigDecimal(entry.getValue());
- BigDecimal interestBigDecimal = principalInterestBigDecimal.subtract(principalBigDecimal);
- interestBigDecimal = interestBigDecimal.setScale(2, BigDecimal.ROUND_DOWN);
- inMap.put(entry.getKey(), interestBigDecimal.doubleValue());
- }
- return inMap;
- }
- /**
- * 等额本金计算获取还款方式为等额本金的每月偿还本金
- *
- * 公式:每月应还本金=贷款本金÷还款月数
- *
- * @param invest
- * 总借款额(贷款本金)
- * @param yearRate
- * 年利率
- * @param month
- * 还款总月数
- * @return 每月偿还本金
- */
- public static double getPerMonthPrincipal(double invest, int totalMonth) {
- BigDecimal monthIncome = new BigDecimal(invest).divide(new BigDecimal(totalMonth), 2, BigDecimal.ROUND_DOWN);
- return monthIncome.doubleValue();
- }
- /**
- * 等额本金计算获取还款方式为等额本金的总利息
- *
- * @param invest
- * 总借款额(贷款本金)
- * @param yearRate
- * 年利率
- * @param month
- * 还款总月数
- * @return 总利息
- */
- public static double getInterestCount(double invest, double yearRate, int totalMonth) {
- BigDecimal count = new BigDecimal(0);
- Map<Integer, Double> mapInterest = getPerMonthInterest(invest, yearRate, totalMonth);
- for (Map.Entry<Integer, Double> entry : mapInterest.entrySet()) {
- count = count.add(new BigDecimal(entry.getValue()));
- }
- return count.doubleValue();
- }
- /**
- * @param args
- */
- public static void main(String[] args) {
- double invest = 10000; // 本金
- int month = 12;
- double yearRate = 0.15; // 年利率
- Map<Integer, Double> getPerMonthPrincipalInterest = getPerMonthPrincipalInterest(invest, yearRate, month);
- System.out.println("等额本金---每月本息:" + getPerMonthPrincipalInterest);
- double benjin = getPerMonthPrincipal(invest, month);
- System.out.println("等额本金---每月本金:" + benjin);
- Map<Integer, Double> mapInterest = getPerMonthInterest(invest, yearRate, month);
- System.out.println("等额本金---每月利息:" + mapInterest);
- double count = getInterestCount(invest, yearRate, month);
- System.out.println("等额本金---总利息:" + count);
- }
- }
转自:https://blog.csdn.net/wzygis/article/details/51809575
等额本金、等额本息工具类(Java版)相关推荐
- 贷款计算器- 等额本金、等额本息工具类(Java版)
/** * Description:等额本金工具类 * Copyright: Copyright (Corporation)2015 * Company: Corporation * @version ...
- 腾讯开放平台接口鉴权(计算签名)工具类 java版
腾讯开放平台 接口鉴权(签名)工具类 java版 用到了Hutool工具类 package top.seasmall.platform.core.config.nettyws.util;import ...
- 方差计算工具类--Java版
方差的计算,如果不太计较精度的话,可以使用 Apache 的 commons-math3(http://commons.apache.org/proper/commons-math/)提供的 Vari ...
- 坐标系转换工具类Java版Js版
Java版本: public class GPSUtils {private static double x_pi = 3.14159265358979324 * 3000.0 / 180.0;// ...
- java 等额本金等额本息工具类
2019独角兽企业重金招聘Python工程师标准>>> 等额本息: /*** Description:等额本息工具类* Copyright: Copyright (corporati ...
- 等额本金等额本息工具类2023
等额本金&等额本息工具类2023 等额本金 等额本金 问题反馈 等额本金 import java.math.BigDecimal; import java.math.RoundingMode; ...
- SHA1签名工具类java
SHA1签名工具类java package com.net.util;import java.security.MessageDigest; import java.util.Iterator; im ...
- 自定义日期工具类 java 1614698552
自定义日期工具类 java 1614698552 需求 思路 演练 日期转字符串的方法 字符串转日期方法 测试类 更多尝试 测试另一个方法
- 财务转换工具 - 人民币金额转大写工具类 java 版本
文章目录 财务转换工具 - 人民币金额转大写工具类 java 版本 1.示例 2.代码 财务转换工具 - 人民币金额转大写工具类 java 版本 1.示例 public static void mai ...
最新文章
- Java实现网页截屏功能(基于phantomJs)
- 08 - JavaSE之IO流
- 5张图搞懂Java深浅拷贝
- boost::hana::sfinae用法的测试程序
- 在服务器上使用第三方独立组件对Word/Excel进行编程
- gj9 迭代器和生成器
- python爬虫06 | 你的第一个爬虫,爬取当当网 Top 500 本五星好评书籍
- 云服务器 ECS CentOS 7配置默认防火墙 Firewall
- 构造函数不能为虚函数
- gitkraken同步建立repository与github上的repository
- sql 整改措施 注入_SQL注入入侵防范措施
- 设计灵感|App中的页面空状态应该如何表现?
- ActiveReports 9实战教程(3): 图文并茂的报表形式
- C++课设:GUI电话簿程序
- 标签thead与th的区别
- 2进制 16进制 计算机术语,十六进制转二进制计算器
- 中小学python编程教学-中小学青少年编程课程
- 概率论 1.3 古典概型与几何概型
- 微信消息提醒python实现
- 大数据算法识别高自杀风险人群?准确率高得吓人
热门文章
- 中国“千禧一代”是一群什么样的消费者?
- 英语语言学论文选题 计算机,88个英语语言学、语言论文题目选题参考
- 云影数码工作室-创业计划书
- 极客日报:vivo投资超49亿元建人才房;马斯克承认完全自动驾驶 “不是很好”;Edge浏览器出现无法关闭的广告
- ML01 -- KNN算法
- Third1: Basic Web applications BASIC NFS services triggering mount | Cloud computing
- eslint : 无法加载文件 C:\Users\user\AppData\Roaming\npm\eslint.ps1
- 金九银十的你准备好了吗?Python 100道基础面试题先收藏!【附答案】
- 2508.笨拙的手指(进制转化+巧用异或运算)
- 计算机毕业设计JAVA二手物品置换平台mybatis+源码+调试部署+系统+数据库+lw