Java 爪哇欧元硬币兑换面额
我认为我在如何开发代码部分方面遇到了一个逻辑问题,该部分负责获取剩余部分,并检查是否可以从显示的更改类别中提取更改。 它的设计目的是获取你欠某人多少钱的价值,并做出最有效的改变 我的当前输出:Java 爪哇欧元硬币兑换面额,java,coin-change,Java,Coin Change,我认为我在如何开发代码部分方面遇到了一个逻辑问题,该部分负责获取剩余部分,并检查是否可以从显示的更改类别中提取更改。 它的设计目的是获取你欠某人多少钱的价值,并做出最有效的改变 我的当前输出: The change for 328.0 Euro cents is: 1.64 € 2 1.28 € 1 0.56 € 0.50 1.4 € 0.20 0.8 € 0.10 1.6 € 0.05 1.5 € 0.02 1.0 € 0.01 正确输出: The chang
The change for 328.0 Euro cents is:
1.64 € 2
1.28 € 1
0.56 € 0.50
1.4 € 0.20
0.8 € 0.10
1.6 € 0.05
1.5 € 0.02
1.0 € 0.01
正确输出:
The change for 328 Euro cents is:
1 €2
1 €1
0 €0.50
1 €0.20
0 €0.10
1 €0.05
1 €0.02
1 €0.01
我被难住了,谢谢你的帮助
import java.util.Scanner; // Enables user input
public class Change {
private static Scanner scnr;
public static void main(String [] args) {
scnr = new Scanner(System.in);
double changeR = 0; // User input
double oneCent = 0; // Number of one cent coins
double twoCent = 0; // Number of two cent coins
double fiveCent = 0; // Number of five cent coins
double tenCent = 0; // Number of ten cent coins
double twentyCent = 0; // Number of twenty cent coins
double fiftyCent = 0; // Number of fifty cent coins
double oneEUC = 0; // Number of one Euro cent coins
double twoEUC = 0; // Number of two Euro cent coins
System.out.println("Please enter the amount of change in Euro cents to be returned (a number between 0 & 499): ");
changeR = scnr.nextInt(); // Gathers user input
System.out.println("The change for " + changeR + " Euro cents is: "); // Outputs users inputted value
twoEUC = changeR / 200;
changeR = changeR % 200;
oneEUC = changeR / 100;
changeR = changeR % 100;
fiftyCent = changeR / 50;
changeR = changeR % 50;
twentyCent = changeR / 20;
changeR = changeR % 20;
tenCent = changeR / 10;
changeR = changeR % 10;
fiveCent = changeR / 5;
changeR = changeR % 5;
twoCent = changeR / 2;
changeR = changeR % 2;
oneCent = changeR / 1;
changeR = changeR % 1;
System.out.println( twoEUC + " \u20ac" + " 2");
System.out.println( oneEUC + " \u20ac" + " 1");
System.out.println( fiftyCent + " \u20ac" + " 0.50");
System.out.println( twentyCent + " \u20ac" +" 0.20");
System.out.println( tenCent + " \u20ac" +" 0.10");
System.out.println( fiveCent + " \u20ac" +" 0.05");
System.out.println( twoCent + " \u20ac" +" 0.02");
System.out.println( oneCent + " \u20ac" +" 0.01");
return;
}
}
当处理货币1时,通常只需要处理整数 将所有变量更改为
int
将获得正确的值,因为整数除法将确保238/200=1
。而不是双除法,这将导致238.0/200.0=1.19
在代码中(以及在现实生活中)处理金钱是一个难题。您需要以用户可读的形式显示输出,因此您不希望由于双重不精确的问题而将价格显示为5.0001€
,但您也不希望计算进行“急切”舍入,因此最终结果是关闭的。最简单的方法之一是取最小的“原子”,即美分,只交易它们
这里的打字错误:
changeR=changeR/100代码>你想发生什么,发生了什么?我在回顾时注意到了这一点,呃。我想要上面显示的输出示例,但我得到的余数值没有被带入,因此:将用户输入转换为整数。然后用整数进行所有计算。我认为你的问题是因为过度使用了double。谢谢,我忽略了这一点,我非常感激。在编程中有很多看似简单的问题,实际上很难100%正确,因为在大多数情况下你甚至没有注意到它们。货币就是其中之一。@Andrew如果(大概)这个答案解决了你的问题,你也可以把它标记为正确的。我把它标记为正确的(刚刚知道这就是大复选标记的意义),再次感谢你的帮助,其他人,我真的很感激。同时,感谢您的激励和反馈!