我在Java书上做了第一章练习,现在我已经遇到了问题。我会打印这个问题,
提示/读取表示货币金额的双倍值。然后确定表示该金额所需的每个账单和硬币的最少数量,从最高开始(假设十美元钞票是所需的最大尺寸)。例如,如果输入的值是47,63(四十七美元和六十三美分),程序应该打印等量的数据:
- 4十美元钞票
- 1五美元钞票
- 2美元钞票
- 2个季度
- 1角钱
- 0 nickels
- 3便士“
醇>等
我正如他们所说的那样做一个例子以获得一个想法,正如您将在代码中看到的那样。尽管如此,我设法打印4美元,我无法弄清楚如何获得“1 5美元”,只有7美元(见代码)。
请不要为我做整个代码。关于我所说的,我只需要一些建议。谢谢。
import java.util.Scanner;
public class PP29 {
public static void main (String[] args) {
Scanner sc = new Scanner (System.in);
int amount;
double value;
double test1;
double quarter;
System.out.println("Enter \"double\" value: ");
value = sc.nextDouble();
amount = (int) value / 10; // 47,63 / 10 = 4.
int amount2 = (int) value % 10; // 47 - 40 = 7
quarter = value * 100; // 47,63 * 100 = 4736
int sum = (int) quarter % 100; // 4763 / 100 => 4763-4700 = 63.
System.out.println(amount);
System.out.println(amount2);
}
}
答案 0 :(得分:3)
要获得10美元钞票的结果,除以10。
现在考虑如何使用7 / 5
和7 % 5
。
我还建议你不要使用双打,因为表示错误可能会给你一个不正确的结果。最好以美分执行此计算,并仅使用整数运算。 “47,63”的输入可以被视为4763美分,而10美元的账单是1000美分。
答案 1 :(得分:1)
首先,如果可能,您不应该使用浮点数进行计算。有许多棘手的细节。
对于这个问题,最好将货币值读作双精度值,然后尽快将其转换为分数。
double monetaryValue = scanner.nextDouble();
int cents = (int) (monetaryValue * 100.0 + 0.5);
int remaining = cents;
int tenDollars = remaining / 1000;
remaining %= 1000;
int fiveDollars = remaining / 500;
// TODO: continue calculation with remaining ...
我相信你会知道如何继续。