import java.util.Date;
import java.util.Scanner;
class Loan {
private double annualInterestRate;
private int numberOfYears;
private double loanAmount;
private Date loanDate;
Loan() {
}
public Loan(double annualInterestRate, int numberOfYears, double loanAmount, Date loanDate) {
loanDate = new Date();
this.annualInterestRate = annualInterestRate;
this.numberOfYears = numberOfYears;
this.loanAmount = loanAmount;
this.loanDate = loanDate;
}
public Date getLoanDate() {
return loanDate;
}
public double getAnnualInterestRate() {
return annualInterestRate;
}
public void setAnnualInterestRate(double annualInterestRate) {
this.annualInterestRate = annualInterestRate;
}
public int getNumberOfYears() {
return numberOfYears;
}
public void setNumberOfYears(int numberOfYears) {
this.numberOfYears = numberOfYears;
}
public double getLoanAmount() {
return loanAmount;
}
public void setLoanAmount(double loanAmount) {
this.loanAmount = loanAmount;
}
public double getMonthlyPayment() {
return loanAmount * (annualInterestRate / 1200) / (1 - Math.pow(1 / (1 + annualInterestRate / 1200), (numberOfYears * 12)));
}
public double getTotalPayment() {
return (loanAmount * (annualInterestRate / 1200) / (1 - Math.pow(1 / (1 + annualInterestRate / 1200), (numberOfYears * 12)))) * numberOfYears * 12;
}
}
public class test {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
Loan m = new Loan();
m.setAnnualInterestRate(input.nextDouble());
m.setNumberOfYears(input.nextInt());
m.setLoanAmount(input.nextDouble());
System.out.println("贷款年利率是" + m.getAnnualInterestRate());
System.out.println("贷款总额是" + m.getLoanAmount());
System.out.println("贷款年限是" + m.getNumberOfYears());
System.out.println("月还款额是" + m.getMonthlyPayment());
System.out.println("还款总额是" + m.getTotalPayment());
}
}
代码和运行结果如上,红笔标出的是运行结果不一样的地方,只差那几个数,我实在搞不明白。
import java.util.Date;
import java.util.Scanner;
class Loan {
private double annualInterestRate;
private int numberOfYears;
private double loanAmount;
private Date loanDate;
Loan() {
}
public Loan(double annualInterestRate, int numberOfYears, double loanAmount, Date loanDate) {
loanDate = new Date();
this.annualInterestRate = annualInterestRate;
this.numberOfYears = numberOfYears;
this.loanAmount = loanAmount;
this.loanDate = loanDate;
}
public Date getLoanDate() {
return loanDate;
}
public double getAnnualInterestRate() {
return annualInterestRate;
}
public void setAnnualInterestRate(double annualInterestRate) {
this.annualInterestRate = annualInterestRate;
}
public int getNumberOfYears() {
return numberOfYears;
}
public void setNumberOfYears(int numberOfYears) {
this.numberOfYears = numberOfYears;
}
public double getLoanAmount() {
return loanAmount;
}
public void setLoanAmount(double loanAmount) {
this.loanAmount = loanAmount;
}
public double getMonthlyPayment() {
return loanAmount * (annualInterestRate / 1200) / (1 - Math.pow(1 / (1 + annualInterestRate / 1200), (numberOfYears * 12)));
}
public double getTotalPayment() {
return (loanAmount * (annualInterestRate / 1200) / (1 - Math.pow(1 / (1 + annualInterestRate / 1200), (numberOfYears * 12)))) * numberOfYears * 12;
}
}
public class test {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
Loan m = new Loan();
m.setAnnualInterestRate(input.nextDouble());
m.setNumberOfYears(input.nextInt());
m.setLoanAmount(input.nextDouble());
System.out.println("贷款年利率是" + m.getAnnualInterestRate());
System.out.println("贷款总额是" + m.getLoanAmount());
System.out.println("贷款年限是" + m.getNumberOfYears());
System.out.println("月还款额是" + m.getMonthlyPayment());
System.out.println("还款总额是" + m.getTotalPayment());
}
}
发帖第一步,学会格式化代码。不然发出来很多人都没兴趣审题了
上午看到这个题,想着跟现在的业务也有相关之处,拿来练练手
处理工作间隙解决问题,思路如下:
1.首先想到精度问题,涉及到金额的操作,应该使用BigDecimal,楼主直接使用double是不行的
2.快速写demo,涉及到很多细节,如:BigDecimal四则,除法的四舍五入和小数位
3.demo结果不对,疑惑
4.拿手机计算器直接算,精度会差一点,但不会差太多,算出的结果跟楼主和demo都不一样,疑惑
总结:
总在业务中打转,没有太多时间提高基础能力,一个看起来简单的问题,却不知道原因在哪里,难受
如果楼主有了答案,比如题目错了,请告诉我一声,谢谢!