簡體   English   中英

在 Java 程序上無法獲得所需的結果

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM