java 等额本息还款。这个应该怎么算?

Python016

java 等额本息还款。这个应该怎么算?,第1张

import java.math.BigDecimal

/**

* 银行还款计算

* @author cuiran

* @version TODO

*/

public class BankRefund {

/**

*

* 等额本金还款法【利息少,但前期还的多】

* @param totalMoeny 贷款总额

* @param rate 贷款商业利率

* @param year 贷款年限

*/

public static void principal(int totalMoney,double rate,int year){

/**

* 每月本金

*/

int totalMonth=year*12

double monthPri=totalMoney/totalMonth

/**

* 获取月利率

*/

double monRate=resMonthRate(rate)

BigDecimal b = new BigDecimal(monRate)

monRate = b.setScale(6, BigDecimal.ROUND_HALF_UP).doubleValue()

for(int i=1i<=totalMonthi++){

double monthRes=monthPri+(totalMoney-monthPri*(i-1))*monRate

BigDecimal b1 = new BigDecimal(monthRes)

monthRes = b1.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue()

System.out.println("第"+i+"月,还款为:"+monthRes)

}

}

/**

*

* 等额本息还款【利息多】

* @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

}

/**

* TODO

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

int totalMoney=430000

double rate=0.0655

int year=20

// BankRefund.interest(totalMoney, rate, year)

BankRefund.principal(totalMoney, rate, year)

}

}

//java 等额本息还款编程每月应还:a*[i*(1+i)^n]/[(1+I)^n-1]

//看不懂你公式里i和I的区别,就当做是利率1和利率2了

//百度到的等额本息还款公式应该是X = Aβ(1+β)^m/[(1+β)^m-1],估计你是打错了,但还是按你的编写了

package Test

import java.util.Scanner

import java.lang.Math

public class Huankuan {

public static void main(String[] args) {//

double sum=0d//还款数

double a=1d//欠款数

double i=1d//利率1

double I=0d//利率2

int n//欠 款月数

//金 额类要求精度高,都用double类型

Scanner sc=new Scanner(System.in)

System.out.println("请输入欠款数")

a=sc.nextDouble()

System.out.println("请输入月数")

n=sc.nextInt()

System.out.println("请输入利率1(百分比)")

i=sc.nextDouble()/100

System.out.println("请输入利率2(百分比)")

I=sc.nextDouble()/100

sum=a*(i*Math.pow(1+i, n))/(Math.pow(1+I, n-1))

System.out.println("等额本息还款,每月应还:"+sum+"元")

}

}

程序里的表达式和数学的表达式不太相同,里面是不能随变用中括号 “[” "]"的。把中括号换成小括号就可以了。另外,(1+py)^n改成Math.pow((1+py)。多看一些基础的编程知识吧。