【发布时间】:2014-02-15 18:53:16
【问题描述】:
我刚开始学习 Java,但我似乎无法让这个计算器工作。 我想要一个可变的金额,并据此计算获得该金额所需的最少硬币数量。
这是我的程序:
double amount, quarters, dimes, nickels, pennies;
int quartersNeeded, dimesNeeded, nickelsNeeded, penniesNeeded;
amount = 1.63;
quarters = 0.25;
dimes = 0.1;
nickels = 0.05;
pennies = 0.01;
quartersNeeded = (int)(amount / quarters);
amount = amount - (quartersNeeded * 0.25);
dimesNeeded = (int)(amount / dimes);
amount = amount - (dimesNeeded * 0.1);
nickelsNeeded = (int)(amount / nickels);
amount = amount - (nickelsNeeded * 0.05);
penniesNeeded = (int)(amount / pennies);
amount = amount - (penniesNeeded * 0.01);
System.out.println(amount);
System.out.println(quartersNeeded);
System.out.println(dimesNeeded);
System.out.println(nickelsNeeded);
System.out.println(penniesNeeded);
Quarters, dimens, and Nines 似乎可以正常工作,但一旦达到便士,金额类似于 0.0099999999999887,如果初始金额的百分之一为 3,4,7,8,9,则 penniesNeeded 总是短一.
【问题讨论】:
-
啊,是的,这个问题出现在 Bloch 的 Effective Java 中。
-
这是一个浮点数问题,不是 java 特有的。如果你只是学习java,很难解释清楚,但它与浮点数的最大精度有关,要解决这个问题,你必须考虑精度的损失
-
您可以使用BigDecimal 和MathContext 来尽可能精确。
标签: java