您的位置:首页 > 编程语言 > Java开发

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入。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  等额本息