Java收银机:从不同的子单元中获取零钱

Java收银机:从不同的子单元中获取零钱,java,Java,在自学Java的过程中,我遇到了一个示例问题,该问题要求我创建一个收银机程序,该程序将以美元、镍币、25美分、10美分和1美分的形式计算给客户的总零钱 我计算出了用户输入,但获得正确的子单位是一个棘手的部分。例如:如果成本为4美元,投标金额为5美元,那么很容易编写返回1美元的代码行。但我遇到的麻烦是把需要多少硬币和便士放在正确的字段中。例2:总成本4.62美元,投标价5美元,变更价0.38美元 System.out.print("Enter the sale amount

在自学Java的过程中,我遇到了一个示例问题,该问题要求我创建一个收银机程序,该程序将以美元、镍币、25美分、10美分和1美分的形式计算给客户的总零钱

我计算出了用户输入,但获得正确的子单位是一个棘手的部分。例如:如果成本为4美元,投标金额为5美元,那么很容易编写返回1美元的代码行。但我遇到的麻烦是把需要多少硬币和便士放在正确的字段中。例2:总成本4.62美元,投标价5美元,变更价0.38美元

            System.out.print("Enter the sale amount: $   ");
    double sale = user.nextDouble();
    System.out.print("Enter the amount tendered by customer: $   ");
    double tendered = user.nextDouble();
    double totalChange = (tendered - sale);
    System.out.printf("TOTAL CHANGE: $  %.2f\n", totalChange);
    dollars = totalChange/1;
    quarters = totalChange/25;
    dimes = totalChange/10;
    nickels = totalChange/5;
    pennies = totalChange/1;




    System.out.printf("DOLLARS: %.2f\n", dollars);
    System.out.printf("QUARTERS: %.2f\n", quarters);
    System.out.printf("DIMES: %.2f\n", dimes);
    System.out.printf("NICKELS: %.2f\n", nickels);
    System.out.printf("PENNIES: %.2f\n", pennies);
我不需要答案(因为我想学习和自学),只需要一些关于如何去做的建议

编辑:这个算法我做错了什么:

            dollars = totalChange/1;
    dollars = (int)dollars;
    dl = totalChange % 1;

    quarters = dl/0.25;
    q = quarters % 0.25;
    quarters = (int)quarters;

    dimes = q / .10;
    d = dimes % .10;



    nickels = d / .5;
    n = nickels % .5;

    pennies = n / .1;
    n = pennies/ .1;

你在正确的轨道上。在确定零钱的最大整数后,减去它。然后确定你能从剩下的硬币中得到的最大数量的硬币。对每个人重复。这和你作为人类自己做这件事的方式是一样的。

也可以使用BigDecimal,而不是double和int。请参阅此stackoverflow问题:从季度开始=((整数)(总变化%1)*100/25);行!我确实了解了数字格式课程。我应该先弄清楚算法吗?或者改变数据类型会使它复杂化吗?以一种方式编码它,然后必须返回并切换数据类型,这将是更多的工作。但是,在这种情况下,我认为最好先对算法有一个很好的理解,因为您正在自学Java。我还不会切换到BigDecimal。除非你弄明白了逻辑。但我会转而使用int或long,并使用整数美分。对货币使用浮点数只会带来问题。