[英]Can't get desired result on Java program
問題集要求我在 class 債務中創建一堆方法。 printBalance 方法打印當前余額,waitOneYear 方法增加債務金額。
通過將余額乘以利率來增加債務。
程序應 output 120000.0, 121200.0, 147887.0328416936 使用此測試代碼后:
Debt mortgage = new Debt(120000.0, 1.01);
mortgage.printBalance();
mortgage.waitOneYear();
mortgage.printBalance();
int years = 0;
while (years < 20) {
mortgage.waitOneYear();
years = years + 1;
}
mortgage.printBalance();
我的債務 class 上的代碼是:
private double balance;
private double interestRate;
public Debt(double initialBalance, double initialInterestRate) {
balance = initialBalance;
interestRate = initialInterestRate;
}
public void printBalance(){
System.out.println(balance);
}
public void waitOneYear(){
this.balance = this.balance + (this.balance*(this.interestRate/100));
}
我從測試代碼中得到的前 2 個 integer 值是正確的,但是我的第三個值是 148194.8253662062。 任何人都可以幫忙嗎?
這是一個浮點錯誤。 這是一個很好的閱讀主題https://dzone.com/articles/never-use-float-and-double-for-monetary-calculatio
這就是為什么在處理 Java 中的貨幣時,您必須始終使用 BigDecimal
這是您的代碼轉換為使用 BigDecimal。
static class Debt {
private BigDecimal balance;
private BigDecimal interestRate;
Debt(double initialBalance, double initialInterestRate) {
balance = BigDecimal.valueOf(initialBalance);
interestRate = BigDecimal.valueOf(initialInterestRate);
}
public void printBalance() {
System.out.println(balance.setScale(10, RoundingMode.HALF_UP));
}
public void waitOneYear() {
this.balance = this.balance.add(this.balance.multiply(this.interestRate.divide(BigDecimal.valueOf(100), RoundingMode.HALF_DOWN)));
}
}
public static void main(String[] args) {
Debt mortgage = new Debt(120000.0, 1.01);
mortgage.printBalance();
mortgage.waitOneYear();
mortgage.printBalance();
int years = 0;
while (years < 20) {
mortgage.waitOneYear();
years = years + 1;
}
mortgage.printBalance();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.