假设关系r a b和s b c从a,b,c三家公司,借款100W分别是以等额本金,等额本息,等本等息,怎么用IRR,推算利息

等本等息和等额本息有区别吗?_百度知道
等本等息和等额本息有区别吗?
我有更好的答案
等额本息是房贷的还款方式;但是等本等息是现在流行的消费贷的还款方式,其实就是信用卡分期的还款方式。虽然两者每期的还款额相同,但实质是不同的,信用卡分期中每个月还等额的本金A加上等额的利息B,而等额本息是本金a增加,利息b减少的过程。、通常讲就是等额本息拿去做理财的时候收益会随着本金减少,而等本等息即使到最后一个月利息也是按照你的投资金额计算,详细计算规则也可以参考下屹农金服计算器。
采纳率:93%
来自团队:
等额本金和等额本息还款方式利息是相同的,两者哪个好具体看个人偿还能力。等额本息还款法与等额本金还款法两种还款方式的主要区别:等额本金还款法,开始还本多,产生利息少;等额本息还款法,开始还的本金较少,利息相对多。在相同贷款额、利率和贷款年限的条件下,等额本金还款法的利息总额要少于等额本息还款法;等额本息还款法,每月的还款金额相同,每次的还款压力相同;等额本金还款法,前期还款比后期还款多,前期的压力要比后期重,对还款能力的要求高;等额本息还款法,适用于在整个贷款期内家庭收入稳定的贷款户,如国家机关、科研、教学单位人员等;等额本金还款法,适合于当前收入较好,但将来工作情况难以预期的企业职工或中老年职工家庭。而资金紧张、缺少积蓄又急于装修的家庭不适合等额本金还款法。
本回答被网友采纳
等额本息法指在贷款期内每月以相等的金额平均偿还贷款本息的还款方法。每月还款金额相同,便于客户合理安排每月的生活和理财,方便又省心。此种方式为目前最常用的一种方法。等额本金是在还款期内把贷款数总额等分,每月偿还同等数额的本金和剩余贷款在该月所产生的利息,这样由于每月的还款本金额固定,而利息越来越少,借款人起初还款压力较大,但是随时间的推移每月还款数也越来越少。
为您推荐:
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。财务管理学---第8章 例题答案_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
赠送免券下载特权
10W篇文档免费专享
部分付费文档8折起
每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
财务管理学---第8章 例题答案
总评分3.5|
用知识赚钱
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
加入VIP
还剩6页未读,
定制HR最喜欢的简历
你可能喜欢&&&&&&&&&&&&&&&&&&
posts - 37,comments - 15,trackbacks - 0
等额本金与等额本息
等本等息的意思是,每月的本金相等,利息也相等。
等额本息的意思是,每月的本金+利息之和相等(其实每个月本金和利息都有变化,并不相等)
等本等息的意思是,每月的本金相等,利息不等。
等额本金计算:
等额本金是指一种贷款的还款方式,是在还款期内把贷款数总额等分,每月偿还同等数额的本金和剩余贷款在该月所产生的利息,这样由于每月的还款本金额固定,&而利息越来越少,借款人起初还款压力较大,但是随时间的推移每月还款数也越来越少。
1 package com.
3 import java.math.BigD
4 import java.util.ArrayL
5 import java.util.HashM
6 import java.util.L
7 import java.util.M
8 import java.util.Map.E
* 等额本金是指一种贷款的还款方式,是在还款期内把贷款数总额等分,每月偿还同等数额的本金和剩余贷款在该月所产生的利息,这样由于每月的还款本金额固定,
* 而利息越来越少,借款人起初还款压力较大,但是随时间的推移每月还款数也越来越少。
14 public class AverageCapitalUtils {
private static final Integer month = 12;
* 等额本金计算获取还款方式为等额本金的每月偿还本金和利息 (返回,期数,月总和。月利息,月本金)
* 公式:每月偿还本金=(贷款本金÷还款月数)+(贷款本金-已归还本金累计额)×月利率
* @param investMoney
总借款额(贷款本金)
* @param yearRate
* @param otherRate
加息年利率
* @param unit
單位:年,月
* @param month
还款总月数
* @return 每月偿还本金和利息,不四舍五入,直接截取小数点最后两位
public static List&Map&String, Object&& getPerMonthPrincipalInterest(BigDecimal investMoney, BigDecimal yearRate,BigDecimal otherRate, int totalMonth) {
yearRate = yearRate.divide(new BigDecimal("100"), 6, BigDecimal.ROUND_DOWN);//年利率
List&Map&String, Object&& mapList = new ArrayList&&();
Map&String, Object& map = null;
BigDecimal totalAmount = BigDecimal.ZERO; //已还本息
// 每月本金
BigDecimal monthPri = getPerMonthPrincipal(investMoney, totalMonth);
// 获取总月利率
BigDecimal monthRate = yearRate.divide(new BigDecimal(month),6, BigDecimal.ROUND_DOWN);//向下取6位
// 获取加息部分月利率
BigDecimal monthOtherRate = otherRate.divide(new BigDecimal(month),6, BigDecimal.ROUND_DOWN);//向下取6位
for (int i = 1; i &= totalM i++) {
if (i == totalMonth)
//最后一个月的本金= 总金额-已还总金额
monthPri = investMoney.subtract(totalAmount);
totalAmount = totalAmount.add(monthPri);
// (贷款本金-已归还本金累计额)×月利率
BigDecimal monthInvest = investMoney.subtract(monthPri.multiply(new BigDecimal(i-1))).multiply(monthRate); //每月回款的总利息
BigDecimal monthOtherInvest = investMoney.subtract(monthPri.multiply(new BigDecimal(i-1))).multiply(monthOtherRate); //每月回款的财务支付利息
//每月回款金额 = 月利息+月本金
BigDecimal monthRes = monthInvest.add(monthPri).setScale(2, BigDecimal.ROUND_DOWN);
map = new HashMap&&();
map.put("periods", i);
map.put("monthResAndPri", monthRes); //每月回款总额
map.put("monthPri", monthPri); // 回款本金
map.put("monthInvest", monthInvest.setScale(6, BigDecimal.ROUND_DOWN)); // 回款利息
map.put("monthOtherInvest", monthOtherInvest.setScale(6, BigDecimal.ROUND_DOWN)); // 回款其他利息
map.put("surplusMoney", investMoney.subtract(totalAmount)); // 剩余本金
mapList.add(map);
return mapL
* 等额本金计算获取还款方式为等额本金的每月偿还利息
* 公式:每月应还利息=剩余本金×月利率=(贷款本金-已归还本金累计额)×月利率
* @param invest
总借款额(贷款本金)
* @param yearRate
* @param month
还款总月数
* @return 每月偿还利息
public static Map&String, Object& getPerMonthInterest(BigDecimal invest, BigDecimal yearRate, int totalMonth) {
Map&String, Object& inMap = new HashMap&String, Object&();
List&Map&String, Object&& mapList = getPerMonthPrincipalInterest(invest, yearRate,BigDecimal.ZERO, totalMonth);
for (Map&String, Object& map : mapList) {
inMap.put(map.get("periods").toString(), map.get("monthInvest"));
return inM
* 等额本金计算获取还款方式为等额本金的每天偿还利息
* 公式:每天应还利息 = 本金*月利率/起息当月天数
* @param invest
<span style="color: #0
总借款额(贷款本金)
<span style="color: #1
* @param yearRate
<span style="color: #2
<span style="color: #3
* @param totalDay
<span style="color: #4
起息当月天数
<span style="color: #5
* @return 每天偿还利息
<span style="color: #6
<span style="color: #7
public static BigDecimal getPerMonthInterestByDay(BigDecimal invest, BigDecimal yearRate, int totalDay) {
<span style="color: #8
<span style="color: #9
yearRate = yearRate.divide(new BigDecimal("100"), 6, BigDecimal.ROUND_DOWN);//年利率
<span style="color: #0
<span style="color: #1
BigDecimal monthRate = yearRate.divide(new BigDecimal(month),6, BigDecimal.ROUND_DOWN);//向下取6位,获取月利率
<span style="color: #2
<span style="color: #3
BigDecimal income = invest.multiply(monthRate).divide(new BigDecimal(totalDay),6, BigDecimal.ROUND_DOWN);
<span style="color: #4
<span style="color: #5
return income.setScale(6, BigDecimal.ROUND_DOWN);
<span style="color: #6
<span style="color: #7
<span style="color: #8
<span style="color: #9
* 等额本金计算获取还款方式为等额本金的每月偿还本金(每月回款本金)
<span style="color: #0
<span style="color: #1
* 公式:每月应还本金=贷款本金÷还款月数
<span style="color: #2
<span style="color: #3
* @param invest
<span style="color: #4
总借款额(贷款本金)
<span style="color: #5
* @param yearRate
<span style="color: #6
<span style="color: #7
* @param month
<span style="color: #8
还款总月数
<span style="color: #9
* @return 每月偿还本金
<span style="color: #0
<span style="color: #1
private static BigDecimal getPerMonthPrincipal(BigDecimal invest, int totalMonth) {
<span style="color: #2
BigDecimal monthIncome = invest.divide(new BigDecimal(totalMonth), 2, BigDecimal.ROUND_DOWN);
<span style="color: #3
return monthI
<span style="color: #4
<span style="color: #5
<span style="color: #6
<span style="color: #7
* 等额本金计算获取还款方式为等额本金的总利息
<span style="color: #8
<span style="color: #9
* @param invest
<span style="color: #0
总借款额(贷款本金)
<span style="color: #1
* @param yearRate
<span style="color: #2
<span style="color: #3
* @param month
<span style="color: #4
还款总月数
<span style="color: #5
* @return 总利息
<span style="color: #6
<span style="color: #7
public static BigDecimal getInterestCount(BigDecimal invest, BigDecimal yearRate, int totalMonth) {
<span style="color: #8
BigDecimal count = new BigDecimal(0);
<span style="color: #9
Map&String, Object& mapInterest = getPerMonthInterest(invest, yearRate, totalMonth);
<span style="color: #0
<span style="color: #1
for (Entry&String, Object& entry : mapInterest.entrySet()) {
<span style="color: #2
count = count.add((BigDecimal) entry.getValue());
<span style="color: #3
<span style="color: #4
<span style="color: #5
<span style="color: #6
<span style="color: #7
<span style="color: #8
* @param args
<span style="color: #9
<span style="color: #0
public static void main(String[] args) {
<span style="color: #1
BigDecimal invest = new BigDecimal(10000); // 本金
<span style="color: #2
int month = 12;
<span style="color: #3
BigDecimal yearRate = new BigDecimal("8"); // 年利率
<span style="color: #4
List&Map&String, Object&& getPerMonthPrincipalInterest = getPerMonthPrincipalInterest(invest, yearRate,BigDecimal.ZERO, month);
<span style="color: #5
System.out.println("等额本金---每月本息:" + getPerMonthPrincipalInterest);
<span style="color: #6
BigDecimal benjin = getPerMonthPrincipal(invest, month);
<span style="color: #7
System.out.println("等额本金---每月本金:" + benjin);
<span style="color: #8
Map&String, Object& mapInterest = getPerMonthInterest(invest, yearRate, month);
<span style="color: #9
System.out.println("等额本金---每月利息:" + mapInterest);
<span style="color: #0
<span style="color: #1
BigDecimal count = getInterestCount(invest, yearRate, month);
<span style="color: #2
System.out.println("等额本金---总利息:" + count);
<span style="color: #3
<span style="color: #4
System.out.println(getPerMonthInterestByDay(invest, yearRate, 31));
<span style="color: #5
<span style="color: #6
<span style="color: #7 }
等额本息计算:
等额本息是指一种的还款方式,是在还款期内,每月偿还同等数额的(包括和利息),和等额本金是不一样的概念,虽然刚开始还款时每月还款额可能会低于等额本金还款方式,但是最终所还利息会高于等额本金还款方式,该方式经常被银行使用。
每月还款数额如下:
[××(1+月利率)^还款月数]÷[(1+月利率)^还款月数-1]
下面举例说明等额本息还款法,
假定借款人从银行获得一笔20万元的,20年,贷款年利率4.2%,每月还本付息。按照上述公式计算,每月应偿还本息和为1233.14元。
上述结果只给出了每月应付的本息和,因此需要对这个本息和进行分解。仍以上例为基础,一个月为一期,第一期20万元,应支付利息700元(.2%/12),支付本金533.14元,仍欠银行贷款元;第二期应支付利息(×4.2%/12)元。
package com.
import java.math.BigD
import java.math.RoundingM
import java.util.ArrayL
import java.util.L
import com.LoanProductStageVo;
import com.TimeU
* 本息计算器
* @Description: 本息算法
public class PrincipalAndInterestEquals {
* @param args
public static void main(String[] args) {
int periods = 4;
TimeUnits unit = TimeUnits.
RoundingMode roundingMode = RoundingMode.UP;
BigDecimal rate = new BigDecimal("0.12");
BigDecimal money = new BigDecimal("10000");
equalPI_stage(periods, rate, unit, money, roundingMode);
System.out.println("每月本息和(等额本息):"+equalPI_everyMonthPrincipalAddInterset(periods, rate, TimeUnits.month, money, RoundingMode.UP));
System.out.println("每月本息和:"+pEqualI_stage(periods, rate,unit, money, RoundingMode.UP));
pEqualI_stageSumNum(15 ,periods, rate, unit, money, roundingMode);
equalP_stage(periods, rate, money, roundingMode);
List&LoanProductStageVo& stages = equalPI_stage(periods, rate, TimeUnits.month, money, RoundingMode.UP);
for(int i = 0; i & stages.size(); i++) {
System.out.println("------------" + (i+1) + "期");
System.out.println("本金:" + stages.get(i).getPrincipal());
System.out.println("利息:" + stages.get(i).getInterset());
* 月转年,乘以12
private static final BigDecimal MONTH_YEAR = new BigDecimal("12");
* 天转月,乘以30,一月按30天算
private static final BigDecimal DAY_MONTH = new BigDecimal("30");
private static final BigDecimal DAY_YEWR = new BigDecimal("365");
* 利率百分数转换
private static final BigDecimal RATE_CONVERT_PERCENT = new BigDecimal("100");
///-------------------------------等额本息
* 等额本息 —— 计算每期还款本息和
* &p&设贷款额为a,月利率为i,年利率为I,还款月数为n,每月还款额为b,还款利息总和为Y&br/&
* 月均还款:b=a×i×(1+i)^n÷〔(1+i)^n-1〕&/p&
* @param periods 期数,单位:月
* @param rate 年利率
* @param unit 期数单位(目前仅支持年、月、日)
* @param money 要分期的金额
* @param roundingMode 小数位处理
* @return 每期还款额,如单位年,则为每年还款额
public static BigDecimal equalPI_everyMonthPrincipalAddInterset(Integer periods, BigDecimal rate, TimeUnits unit, BigDecimal money, RoundingMode roundingMode) {
rate = rate.divide(RATE_CONVERT_PERCENT, roundingMode).divide(MONTH_YEAR, roundingMode);//将年利率转换成月利率
* 设贷款额为a,月利率为i,年利率为I,还款月数为n,每月还款额为b,还款利息总和为Y
* 月均还款:b=a×i×(1+i)^n÷〔(1+i)^n-1〕
BigDecimal newrate = rate.add(new BigDecimal("1")).pow(periods);//<span style="color: #+月利率
BigDecimal ch = newrate.subtract(new BigDecimal("1"));
BigDecimal monthMoney = money.multiply(rate).multiply(newrate).divide(ch, 2, roundingMode);//每月还款本息和
System.out.println("每月还款本息:"+monthMoney);
System.out.println("通过每月还款本息计算的还款总和:"+monthMoney.multiply(new BigDecimal(stage.getPeriods())));
if(TimeUnits.year == unit) {
return money.multiply(MONTH_YEAR).setScale(2, roundingMode);
} else if(TimeUnits.day == unit) {
return money.divide(DAY_MONTH, 2, roundingMode);
return monthM
* 等额本息 —— 计算各个月份的还款额(&font color='red'&仅支持月&/font&)
* &p&设贷款额为a,月利率为i,年利率为I,还款月数为n,每月还款额为b,还款利息总和为Y&br/&
* 第n月还款利息为:(a×i-b)×(1+i)^(n-1)+b&/p&
* &p&未完成:单位为年和日的,间隔不是1的情况&/p&
* @param periods 分期数,单位:月
* @param rate 年利率
* @param unit 单位(&font color='red'&仅支持月&/font&)
* @param money 贷款总金额
* @param roundingMode 小数位处理
public static List&LoanProductStageVo& equalPI_stage(Integer periods, BigDecimal rate, TimeUnits unit, BigDecimal money, RoundingMode roundingMode) {
rate = rate.divide(RATE_CONVERT_PERCENT, roundingMode).divide(MONTH_YEAR, roundingMode);//计算月利率
* 设贷款额为a,月利率为i,年利率为I,还款月数为n,每月还款额为b,还款利息总和为Y
* 第n月还款利息为:(a×i-b)×(1+i)^(n-1)+b
List&LoanProductStageVo& stageResult = new ArrayList&&();
//BigDecimal principalAddInterset = equalPI_everyMonthPrincipalAddInterset(periods, rate, unit, money,roundingMode);
BigDecimal principalAddInterset = equalPI_everyMonthPrincipalAddInterset(periods, rate, TimeUnits.month, money,roundingMode);
BigDecimal totalLixi = new BigDecimal(0);//临时:利息总额
BigDecimal totalBenjin = new BigDecimal(0);//临时:本金总额
for(int i = 0; i & i++) {
System.out.println("\n--------" + (i+1) + "期");
LoanProductStageVo stageVo = new LoanProductStageVo();
stageVo.setPrincipalAddInterset(principalAddInterset);
if(i + 1 == periods) {
//最后一期的计算,将计算中因小数位导致数据不对称的补充回来
stageVo.setInterset(principalAddInterset.multiply(new BigDecimal(periods)).subtract(money).subtract(totalLixi));
stageVo.setPrincipal(money.subtract(totalBenjin));
BigDecimal currentMonthRate = rate.add(new BigDecimal(1)).pow(i);
BigDecimal interset = money.multiply(rate).subtract(principalAddInterset).multiply(currentMonthRate).add(principalAddInterset).setScale(2, roundingMode);
stageVo.setInterset(interset);
stageVo.setPrincipal(principalAddInterset.subtract(interset));
totalLixi = totalLixi.add(stageVo.getInterset());
totalBenjin = totalBenjin.add(stageVo.getPrincipal());
stageResult.add(stageVo);
System.out.println("还款利息总额:" + totalLixi);
System.out.println("还款本金总额:" + totalBenjin);
return stageR
* 等额本息 —— 按照公式计算第n期的信息
* @param n 第n期
* @param periods 分期数
* @param rate 月利率
* @param unit 单位(目前仅支持年、月)
* @param money 总本金额
* @param roundingMode 小数位取值方式
public static LoanProductStageVo equalPI_stageAtNum(int n, int periods, BigDecimal rate, BigDecimal money, RoundingMode roundingMode) {
if(n &= 0) {
return null;
if(n & periods) {
return null;
rate = rate.divide(RATE_CONVERT_PERCENT, roundingMode).divide(MONTH_YEAR, roundingMode);
* 设贷款额为a,月利率为i,年利率为I,还款月数为n,每月还款额为b,还款利息总和为Y
* 第n月还款利息为:(a×i-b)×(1+i)^(n-1)+b
LoanProductStageVo stageVo = new LoanProductStageVo();
BigDecimal principalAddInterset = equalPI_everyMonthPrincipalAddInterset(periods, rate, TimeUnits.month, money,roundingMode);
BigDecimal currentMonthRate = rate.add(new BigDecimal(1)).pow(n - 1);
BigDecimal interset = money.multiply(rate).subtract(principalAddInterset).multiply(currentMonthRate).add(principalAddInterset).setScale(2, roundingMode);
stageVo.setPrincipalAddInterset(principalAddInterset);
stageVo.setInterset(interset);
stageVo.setPrincipal(principalAddInterset.subtract(interset));
return stageVo;
///-------------------------------等额本金
* 等额本息 —— 计算每期信息
* &p&公式:每月还款金额 = (贷款本金 / 还款月数)+(本金 — 已归还本金累计额)×每月利率&/p&
* @param periods 分期数
* @param rate 年利率
* @param money 本金总额
* @param roundingMode 小数位处理
public static List&LoanProductStageVo& equalP_stage(int periods, BigDecimal rate, BigDecimal money, RoundingMode roundingMode) {
final BigDecimal PERIODS = new BigDecimal(periods + "");
rate = rate.divide(RATE_CONVERT_PERCENT, roundingMode).divide(MONTH_YEAR, roundingMode);
List&LoanProductStageVo& stageResult = new ArrayList&&();
//每月还款本金
BigDecimal everyMonthPrincipal = money.divide(PERIODS, 2, roundingMode);
BigDecimal totalBenjin = new BigDecimal("0");
BigDecimal totalLixi = new BigDecimal("0");
for(int i = 0; i & i++) {
System.out.println("\n--------" + (i+1) + "期");
LoanProductStageVo stageVo = new LoanProductStageVo();
if(i+1 == periods) {
stageVo.setPrincipal(money.subtract(totalBenjin));
stageVo.setInterset(stageVo.getPrincipal().multiply(rate).setScale(2, roundingMode));
stageVo.setPrincipal(everyMonthPrincipal);
stageVo.setInterset(money.subtract(totalBenjin).multiply(rate).setScale(2, roundingMode));
System.out.println("本金:"+stageVo.getPrincipal());
System.out.println("利息:"+stageVo.getInterset());
totalBenjin = totalBenjin.add(stageVo.getPrincipal());
totalLixi = totalLixi.add(stageVo.getInterset());
stageResult.add(stageVo);
System.out.println("本金和:"+totalBenjin);
System.out.println("利息和:"+totalLixi);
return stageR
等本等息为民间借贷、分期购物、银行分期中的一种还款方式。月还款为:本金+利息。
举例说明,假设借款额3万元,借款期限12个月,预计年化借款利率12%,等本等息还款,每月月末归还本金及利息,则公式如下:每月归还本金=贷款3万÷12期=2500元,预计年利息=3万×12%=3600元,为月息300元,那就是每个月需还=2800元。
package com.zhonglian.jinju.pub.service.
import java.math.BigD
import java.math.RoundingM
import java.util.ArrayL
import java.util.L
import com.LoanProductStageVo;
import com.TimeU
*等 本等息计算器
* @Description: 本息算法
public class PrincipalAndInterestEquals2 {
* @param args
public static void main(String[] args) {
int periods = 4;
TimeUnits unit = TimeUnits.
RoundingMode roundingMode = RoundingMode.UP;
BigDecimal rate = new BigDecimal("0.12");
BigDecimal money = new BigDecimal("10000");
pEqualI_stageSumNum(15 ,periods, rate, unit, money, roundingMode);
equalP_stage(periods, rate, money, roundingMode);
List&LoanProductStageVo& stages = equalPI_stage(periods, rate, TimeUnits.month, money, RoundingMode.UP);
for(int i = 0; i & stages.size(); i++) {
System.out.println("------------" + (i+1) + "期");
System.out.println("本金:" + stages.get(i).getPrincipal());
System.out.println("利息:" + stages.get(i).getInterset());
* 月转年,乘以12
private static final BigDecimal MONTH_YEAR = new BigDecimal("12");
* 天转月,乘以30,一月按30天算
private static final BigDecimal DAY_MONTH = new BigDecimal("30");
private static final BigDecimal DAY_YEWR = new BigDecimal("365");
* 利率百分数转换
private static final BigDecimal RATE_CONVERT_PERCENT = new BigDecimal("100");
///-------------------------------等本等息
* 等本等息 —— 计算每期信息
* &p&算法:第n月还款利息为:贷款总额 * 年利率 / 分期数&/p&
* @param periods 分期数,单位月
* @param rate 利率
* @param money 贷款总额
* @param roundingMode 小数位处理
public static List&LoanProductStageVo& pEqualI_stage(int periods, BigDecimal rate, BigDecimal money, RoundingMode roundingMode) {
rate = rate.divide(RATE_CONVERT_PERCENT, roundingMode);
List&LoanProductStageVo& result = new ArrayList&&();
BigDecimal everyMonthPrincipal = money.divide(new BigDecimal(periods+""), 2, roundingMode);
BigDecimal everyMonthInterset = money.multiply(rate).divide(MONTH_YEAR, roundingMode);
BigDecimal totalInterset = everyMonthInterset.multiply(new BigDecimal(periods+""));
BigDecimal principalAddInterset = everyMonthPrincipal.add(everyMonthInterset);
BigDecimal totalBenjin = new BigDecimal("0");
BigDecimal totalLixi = new BigDecimal("0");
for(int i = 0; i & i++) {
System.out.println("\n--------" + (i+1) + "期");
LoanProductStageVo stageVo = new LoanProductStageVo();
if(i + 1 == periods) {
//TODO 算法疑问:最后一期会与前面的不一样
System.out.println("最后");
stageVo.setPrincipal(money.subtract(totalBenjin));
stageVo.setInterset(totalInterset.subtract(totalLixi).setScale(2, roundingMode));
stageVo.setPrincipalAddInterset(principalAddInterset);
stageVo.setInterset(everyMonthInterset);
stageVo.setPrincipal(everyMonthPrincipal);
stageVo.setPrincipalAddInterset(principalAddInterset);
result.add(stageVo);
totalBenjin = totalBenjin.add(stageVo.getPrincipal());
totalLixi = totalLixi.add(stageVo.getInterset());
System.out.println("本金:"+stageVo.getPrincipal());
System.out.println("利息:"+stageVo.getInterset());
System.out.println("月本息和:"+stageVo.getPrincipalAddInterset());
System.out.println("本金和:"+totalBenjin);
System.out.println("利息和:"+totalLixi);
* 等本等息 —— 计算前n期之和,时间单位支持年、月、日(按照公式计算)
* &br/&但对最后一期本金或利息不会“多退少补”计算,本方法完全按照公式走
* @param n 要计算的期数,单位:月
* @param periods 分期数
* @param rate 年利率
* @param unit 时间单位
* @param money 总金额
* @param roundingMode 小数位取值方式
* @return 如果要获取的期数超过分期期数,则返回总本息信息
public static LoanProductStageVo pEqualI_stageSumNum(int n, int periods, BigDecimal rate, TimeUnits unit, BigDecimal money, RoundingMode roundingMode) {
rate = rate.divide(RATE_CONVERT_PERCENT, roundingMode);
LoanProductStageVo stageVo = new LoanProductStageVo();
if(n &= 0) {
stageVo.setInterset(new BigDecimal("0"));
stageVo.setPrincipal(new BigDecimal("0"));
return stageVo;
final BigDecimal PERIODS = new BigDecimal(periods+"");
final BigDecimal N = new BigDecimal(n + "");
BigDecimal monthPrincipal = money.divide(PERIODS, 2, roundingMode);//月本金
BigDecimal monthInterset = money.multiply(rate).divide(MONTH_YEAR, 2, roundingMode);//月利息
BigDecimal nSumPrincipal = null, nSumInterset = null;
boolean nEp = true;//期数校验
if(TimeUnits.year == unit) {
if(n * 12 &= periods) {
nSumPrincipal = monthPrincipal.multiply(N).multiply(MONTH_YEAR);
nSumInterset = monthInterset.multiply(N).multiply(MONTH_YEAR);
nEp = false;
} else if(TimeUnits.month == unit) {
if(n &= periods) {
nSumPrincipal = monthPrincipal.multiply(N);
nSumInterset = monthInterset.multiply(N);
nEp = false;
} else if(TimeUnits.day == unit) {
if(n / 30 &= periods) {
nSumPrincipal = monthPrincipal.multiply(N).divide(DAY_MONTH, 2, roundingMode);
nSumInterset = monthInterset.multiply(N).divide(DAY_MONTH, 2, roundingMode);
nEp = false;
return null;
//n的时间大于分期数情况,计算总和
nSumPrincipal = monthPrincipal.multiply(PERIODS);
nSumInterset = monthInterset.multiply(PERIODS);
stageVo.setPrincipal(nSumPrincipal);
stageVo.setInterset(nSumInterset);
System.out.println("等本等息:前"+n+unit.getText()+"信息");
System.out.println("本金和:"+stageVo.getPrincipal());
System.out.println("利息和:"+stageVo.getInterset());
return stageVo;
TimeUnits类
package com.
import com.fasterxml.jackson.databind.annotation.JsonS
@JsonSerialize(as = StringValueTextEnum.class)
public enum TimeUnits implements StringValueTextEnum {
minute("minute", "分"),
hour("hour", "时"),
day("day", "天"),
week("week", "周"),
month("month", "月"),
year("year", "年");
private TimeUnits(String value, String text) {
this.value =
this.text =
public String getValue() {
public void setValue(String value) {
this.value =
public String getText() {
public void setText(String text) {
this.text =
&LoanProductStageVo公共类
package com.
import java.math.BigD
* 分期计算结果类
public class LoanProductStageVo {
private BigDecimal principalAddI
private BigD
private BigD
* 本息和(单独的公式计算,每月相同)
public BigDecimal getPrincipalAddInterset() {
if(principalAddInterset == null && principal != null && interset != null) {
principalAddInterset = principal.add(interset);
return principalAddI
* 本息和(单独的公式计算,每月相同)
* @param principalAddInterset
public void setPrincipalAddInterset(BigDecimal principalAddInterset) {
this.principalAddInterset = principalAddI
public BigDecimal getPrincipal() {
* @param principal
public void setPrincipal(BigDecimal principal) {
this.principal =
public BigDecimal getInterset() {
* @param interset
public void setInterset(BigDecimal interset) {
this.interset =
阅读(...) 评论()

我要回帖

更多关于 假设检验 的文章

 

随机推荐