我一直致力于制作一个程序来计算变化,并且该程序永远不会结束运行并在完成后终止。我不知道我的代码有什么问题。如果有人能提供帮助那就太好了。
private static void calculateChange(double price, double given) {
int ones = 0, quarters = 0, dimes = 0, nickels = 0, pennies = 0;
double change = given - price;
while (change != 0) {
if (change >= 1) {
change = change - 1;
ones++;
}
if (change >= .25) {
change = change - 0.25;
quarters++;
}
if (change >= .10) {
change = change - .10;
dimes++;
}
if (change >= .05) {
change = change - .05;
nickels++;
}
if (change >= .01) {
change = change - .01;
pennies++;
}
}
System.out.println();
System.out.println("Correct Change");
System.out.println("Ones " + ones);
System.out.println("Quarters " + quarters);
System.out.println("Dimes " + dimes);
System.out.println("Nickels " + nickels);
System.out.println("Pennies " + pennies);
}
最佳答案
double
类型为 floating point , float 以精度换取性能。在某些时候,当您从变化
中减去美分时,它会变得小于0.01但大于零,或它会变得小于零。
在这两种情况下,所有 if
条件都将为 false,但 while
条件仍然为 true,从而导致无限循环。
一个快速的解决方案是将您的 while
条件从 change != 0
更改为 change >= 0.01
。
更好的解决方案是使用整数类型(例如 int
)并让它存储美分的数量(因此 1 美元等于 100)。这种方法不会有任何 float 不准确的情况。
关于java - 计算程序中的变化 - 浮点错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42598770/