【问题标题】:Change Program Not Working with $1.16更改程序不适用于 1.16 美元
【发布时间】:2014-09-11 17:22:22
【问题描述】:

这个程序除了 $1.16 之外进行了更改,为什么不能正确处理?

public class Change {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.println("Enter Change: ");
        double change = in.nextDouble()*100;
        int dollars = Math.round((int)change/100);
        change=change%100;
        int quarters = Math.round((int)change/25);
        change=change%25;
        int dimes = Math.round((int)change/10);
        change=change%10;
        int nickels = Math.round((int)change/5);
        change=change%5;
        int pennies = Math.round((int)change/1);

        System.out.println("Dollars: " + dollars);
        System.out.println("Quarters: " + quarters);
        System.out.println("Dimes: " + dimes);
        System.out.println("Nickels: " + nickels);
        System.out.println("Pennies: " + pennies);
    }
}

我认为这是一个截断问题,因为当我在以下代码中使用 .9 时,它可以工作:

int pennies = Math.round((int)change/.9);

【问题讨论】:

  • 这就是 BigDecimal 用于银行业务的原因
  • 以美分计算所有的...

标签: java casting truncation


【解决方案1】:

问题是变化是双重的。当我运行它时,我在便士声明之前打印出零钱,这就是打印的内容:0.9999999999999858。当它被转换为 int 时,它变为 0。所以 0 / 1 为 0。不要将模除法与 double 一起使用。当您输入 1.16 时,它会返回 1.1599999999999999999999999999999。尝试将输入向上取整。

        Scanner in = new Scanner(System.in);
        System.out.println("Enter Change: ");
        int change = (int)(Math.ceil(in.nextDouble()*100));
        int dollars = Math.round((int)change/100);
        change=change%100;
        int quarters = Math.round((int)change/25);
        change=change%25;
        int dimes = Math.round((int)change/10);
        change=change%10;
        int nickels = Math.round((int)change/5);
        change=change%5;
        int pennies = Math.round((int)change/1);

        System.out.println("Dollars: " + dollars);
        System.out.println("Quarters: " + quarters);
        System.out.println("Dimes: " + dimes);
        System.out.println("Nickels: " + nickels);
        System.out.println("Pennies: " + pennies);

此代码有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-06
    • 2015-09-05
    • 1970-01-01
    相关资源
    最近更新 更多