首页 > 解决方案 > 爪哇。计算正确的变化

问题描述

我写了一个代码来计算零钱(美元钞票的数量,一角硬币,便士......)。只有“便士”工作,但不是它应该的方式,所有其余的代码行都没有响应。

    public BigDecimal deposit() {
    String money = io.readString("Please, deposit money");
    BigDecimal deposit = new BigDecimal(money);
    return deposit;
}

public void change(String itemId) throws VendingMachinePersistenceException {
    Change change = new Change();
    Item item = dao.getItem(itemId);\\this line works
    BigDecimal change1 = deposit().subtract(item.getPrice());\\this line works
    int changeBack = change1.intValue();

    io.print("Your change is : ");
        change = change.remainder(new BigDecimal("100"));
    if (changeBack/100 != 0) {
        change.setDollars(changeBack/100);
        changeBack = changeBack%100;
        io.print(change.getDollars() + " dollars, ");
    }

    if (changeBack/25 != 0) {
        change.setQuarters(changeBack/25);
        changeBack = changeBack%25;

        io.print(change.getQuarters() + " quarters, ");
    }
    if (changeBack/10 != 0) {
        change.setDimes(changeBack/10);
        changeBack = changeBack%10;
        io.print(change.getDimes()+ " dimes, ");
    }
    if (changeBack/5!= 0) {
        change.setNickels(changeBack/5);
        changeBack = changeBack%5;
        io.print(change.getNickels() + " nickels, ");
    }

    change.setPennies(changeBack);
    io.print(change.getPennies()+ " pennies.");
}

这可能是 if 语句或将 BigDecimal 转换为 Int 的问题。我不确定。请帮忙!

标签: javaif-statementbigdecimal

解决方案


由于您使用 BigDecimal 来赚钱,因此 change1 的值可能类似于 5.21

将其转换为 int 只会让您获得 5 的 changeBack,从而获得 5 分的零钱。

因此,您可能希望将 BigDecimal 乘以 100,然后再将其转换为 int。


推荐阅读