在java中发行5c硬币

时间:2015-03-31 06:55:30

标签: java

嗨我已经创建了一个程序的大部分,根据项目的价格分配变更但是在处理5c硬币时遇到了一个小问题(澳大利亚货币)

  while (change > 0) {

    if ((change - 1.00) >= 0) {
      System.out.printf("$1.00\n");
      change = (change - 1.00);

    } else if ((change - 0.50) >= 0) {
        System.out.printf("$0.50\n");
        change = (change - 0.50);

    } else if ((change - 0.20) >= 0) {
        System.out.printf("$0.20\n");
        change = (change - 0.20);

    } else if ((change - 0.10) >= 0) {
        System.out.printf("$0.10\n");
        change = (change - 0.10);

    } else if ((change - 0.05) >= 0) {
        System.out.printf("$0.05\n");  
        change = (change - 0.05);
    }
  }

在大多数情况下,此代码使用尽可能少的硬币分配正确的更改,但是当要分配的更改使用5c面额时,它只是忽略它。例如1.25美元将出现1.00美元和0.20美元。

任何帮助将不胜感激。

p.s用java写的,我最近才开始学习。

1 个答案:

答案 0 :(得分:2)

如果不测试代码,我只是假设问题可能与floatdouble变量change的舍入错误有关。 1.25 - 1.00 - 0.20可能会略低于0.05。

这实际上会导致无限循环,因为当change小于0.05时,代码不会终止。

我建议使用intlong变量并以美分为单位,并在change小于最小硬币时终止循环。

如果这不可行,请查看您需要处理金额时首选的BigDecimal类型。