嗨我已经创建了一个程序的大部分,根据项目的价格分配变更但是在处理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写的,我最近才开始学习。
答案 0 :(得分:2)
如果不测试代码,我只是假设问题可能与float
或double
变量change
的舍入错误有关。 1.25 - 1.00 - 0.20可能会略低于0.05。
这实际上会导致无限循环,因为当change
小于0.05时,代码不会终止。
我建议使用int
或long
变量并以美分为单位,并在change
小于最小硬币时终止循环。
如果这不可行,请查看您需要处理金额时首选的BigDecimal
类型。