java等额本金、等额本息计算
2016-07-11 13:34
387 查看
import java.math.BigDecimal; /** * 银行还款计划 */ public class BankRefund { /** * 等额本金还款法【利息少,但前期还的多】 * @param totalMoeny 贷款总额 * @param rate 贷款商业利率 * @param year 贷款年限 */ public static void main(String[] args) throws Exception { int totalMoney=460000; double rate=4.9; int year=25; //double monthRes = monthPri + (totalMoney - monthPri * (i - 1)) * monthRate; 计算公式 BigDecimal bigtotalMoney = new BigDecimal(totalMoney); BigDecimal bigtotalMonth = new BigDecimal(year * 12); BigDecimal bigrate = new BigDecimal(rate); BigDecimal biyearmonth = new BigDecimal(1200); double monthPri = bigtotalMoney.divide(bigtotalMonth, 2, BigDecimal.ROUND_HALF_UP).doubleValue();/**保留2位**/ BigDecimal exactMonthPri=bigtotalMoney.divide(bigtotalMonth, 16, BigDecimal.ROUND_HALF_UP);/**保留16位**/ for (int i = 1; i <= (year * 12); i++) { BigDecimal payedPri=exactMonthPri.multiply(new BigDecimal(i-1));/**已经还的本金**/ BigDecimal remainPri=bigtotalMoney.subtract(payedPri);/**剩余本金**/ BigDecimal monthInterest=remainPri.multiply(bigrate.divide(biyearmonth,16, BigDecimal.ROUND_HALF_UP)); System.out.print("第" + i + "月本金为:"+monthPri); System.out.println(" 月利息为:"+monthInterest.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue()); } } /** * 等额本息还款【利息多】 * @param totalMoeny 贷款总额 * @param rate 贷款商业利率 * @param year 贷款年限 */ public static void interest(int totalMoney, double rate, int year) { double monRate = resMonthRate(rate); double monInterest = totalMoney * monRate * Math.pow((1 + monRate), year * 12) / (Math.pow((1 + monRate), year * 12) - 1); BigDecimal b = new BigDecimal(monInterest); monInterest = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); System.out.println("月供本息和:" + monInterest); } /** * 转换为月利率 * @param rate * @return */ public static double resMonthRate(double rate) { return rate / 12; } public static void main(String[] args) { int totalMoney = 460000; double rate = 0.049; int year = 25; // BankRefund.interest(totalMoney, rate, year); BankRefund.principal(totalMoney, rate, year); } }console:
第1月本金为:1533.33 月利息为:1878.33
第2月本金为:1533.33 月利息为:1872.07
第3月本金为:1533.33 月利息为:1865.81
。。。。。。
BigDecimal.setScale(newScale, roundingMode)方法用于格式化小数点
newScale指的是你小数点后的位数
roundingMode是小数的保留模式
BigDecimal.ROUND_HALF_UP表示的就是4舍5入。
相关文章推荐
- 等额本金和等额本息还款
- 金融领域还款算法
- 贷款计算器- 等额本金、等额本息工具类(Java版)
- BigDecimal用法之计算等额本金和等额本息
- 信用卡分期手续费率与贷款利率间的相互转换
- 等额本金和等额本息两种贷款方式的比较
- 房贷计算
- PHP房贷计算器实例代码,等额本息,等额本金
- windows jdk安装及环境变量配置
- Java---String类的方法小结
- java命令行执行带依赖jar包的main函数
- Rxjava使用详解
- [改善Java代码]列表相等只需关系元素数据
- java 中去除字符串中的空格,两种方法
- 基于SpringBoot + Mybatis实现SpringMVC Web项目
- 用java语言实现事件委托模式
- Inno打包Java Web项目
- Java Persistence with MyBatis 3(中文版) 第四章 使用注解配置SQL映射器
- java基础—— Collections.sort的两种用法,简单明了 。
- 160706、Java HashMap工作原理及实现