等額本金
/**
* 計算等額本金還款
*
* @param principal 貸款總額
* @param months 貸款期限
* @param rate 貸款利率
* @return
*/
public static Kv calculateEqualPrincipal(double principal, int months, double rate) {
Kv kv = Kv.create();
double monthRate = rate / (100 * 12);//月利率
double prePrincipal = principal / months;//每月還款本金
double firstMonth = prePrincipal + principal * monthRate;//第一個月還款金額
double decreaseMonth = prePrincipal * monthRate;//每月利息遞減
double interest = (months + 1) * principal * monthRate / 2;//還款總利息
double totalMoney = principal + interest;//還款總額
kv.put("totalMoney",format(totalMoney));//還款總額
kv.put("principal",format(principal));//貸款總額
kv.put("interest",format(interest));//還款總利息
kv.put("firstMonth",format(firstMonth*10000));//首月還款金額
kv.put("decreaseMonth",format(decreaseMonth*10000));//每月遞減利息
kv.put("months",months);//還款期限
return kv;
}
等額本金
/**
* 計算等額本息還款
*
* @param principal 貸款總額
* @param months 貸款期限
* @param rate 貸款利率
* @return
*/
public static Kv calculateEqualPrincipalAndInterest(double principal, int months, double rate) {
Kv kv = Kv.create();
double monthRate = rate / (100 * 12);//月利率
double preLoan = (principal * monthRate * Math.pow((1 + monthRate), months)) / (Math.pow((1 + monthRate), months) - 1);//每月還款金額
double totalMoney = preLoan * months;//還款總額
double interest = totalMoney - principal;//還款總利息
kv.put("totalMoney",format(totalMoney));//還款總額
kv.put("principal",format(principal));//貸款總額
kv.put("interest",format(interest));//還款總利息
kv.put("preLoan",format(preLoan*10000));//每月還款金額
kv.put("months",months);//還款期限
return kv;
}