【问题标题】:Java cash register: Getting change from in different subunitsJava收银机:从不同的子单元中获取零钱
【发布时间】:2014-01-28 23:30:20
【问题描述】:

自学 Java 时,我遇到了一个示例问题,要求我创建一个收银机程序,该程序将计算返还给客户的美元、镍、四分之一、一角和便士的总零钱。

我计算出用户输入,但获得正确的子单元是一个棘手的部分。例如:如果成本为 4 美元且投标金额为 5 美元,则很容易编写返回 1 美元的代码行。但我遇到的麻烦是把需要多少硬币和便士放在正确的领域。 ex2:总成本 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 而不是双精度数和整数。请参阅此 stackoverflow 问题:stackoverflow.com/questions/1359817/…
  • 从季度开始 = ((int) (totalChange%1)* 100/25);
  • 会的!我确实了解了 NumberFormat 类。我应该先弄清楚算法吗?或者更改数据类型会使其复杂化?
  • 以一种方式对其进行编码将需要更多的工作,然后必须返回并切换数据类型。但是,在这种情况下,我认为最好先对算法有一个很好的理解,因为你是在自学 Java。
  • 我还不会切换到 BigDecimal。直到你弄清楚逻辑。但我会改用 int 或 long,并使用整数美分。使用浮点数只会导致问题。

标签: java


【解决方案1】:

你在正确的轨道上。在确定最大的整美元零钱后,减去它。然后确定你可以从剩下的东西中得到的最大数量的季度。对每个重复。这与您作为人类自己的方式相同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-26
    • 1970-01-01
    相关资源
    最近更新 更多