[英]Why does Math.round return a long but Math.floor return a double?
[英]Make a code for cashier in java. With math.round it gives me more and with math.floor sometimes less what i should do?
我需要编写一个Java程序来计算销售交易的变化。
它只能分配20s,10s,5s,1s,四分之一,一角硬币,镍币和便士。
我做到了,一切都还好,但是我有一个问题。 当我把math.round放进去时,它们会像1.6 in 20euros那样四舍五入,这给我们带来了变化。 如果我把math.floor放进去,那么硬币就少了。 我在做什么错? 这是我的代码:
公共类MyCurrencyCashier {
public static void main (String [] args){
float twentyEuro;
float tenEuro;
float fiveEuro;
float oneEuro;
float twentyFiveCent;
float tenCent;
float fiveCent;
float oneCent;
float change; //declares how much change is given in return
change = Float.parseFloat(args[0]); //read the change from the command line
twentyEuro = (change / 20);
if (twentyEuro >= 1) {
change = (change % 20);
System.out.println("€20 bill: " + Math.round(twentyEuro));
} else {
System.out.println("€20 bill: 0");
}
tenEuro = (change / 10);
if (tenEuro >= 1) {
change = (change % 10);
System.out.println("€10 bill: " + Math.round(tenEuro));
} else {
System.out.println("€10 bill: 0");
}
fiveEuro = (change / 5);
if (fiveEuro >= 1) {
change = (change % 5);
System.out.println("€5 bill: " + Math.round(fiveEuro));
} else {
System.out.println("€5 bill: 0");
}
oneEuro = (change / 1);
if (oneEuro >= 1) {
change = (change % 1);
System.out.println("€1 bill: " + Math.round(oneEuro) + "\n");
} else {
System.out.println("€1 bill: 0");
}
twentyFiveCent= (change / 0.25f);
if (twentyFiveCent >= 1) {
change = (change % 0.25f);
System.out.println("25_cent_coins: " + Math.round(twentyFiveCent));
} else {
System.out.println("25_cent_coins: 0");
}
tenCent = (change / 0.10f);
if (tenCent >= 1) {
change = (change % 0.10f);
System.out.println("10_cent_coins: " + Math.round(tenCent));
} else {
System.out.println("10_cent_coins: 0");
}
fiveCent = (change / 0.05f);
if (fiveCent >= 1) {
change = (change % 0.05f);
System.out.println("5_cent_coins: " + Math.round(fiveCent));
} else {
System.out.println("5_cent_coins: 0");
}
oneCent = (change / 0.01f);
if (oneCent >= 1) {
change = (change % 0.01f);
System.out.println("1_cent_coins: " + Math.round(oneCent));
} else {
System.out.println("1_cent_coins: 0");
}
}//end main
} //结束课程
我输入32.12,我期望
€20欧元:1
10欧元纸币:1
5欧元纸币:0
1欧元纸币:2
25_cent_coins:0
10_cent_coins:1
5_cent_coins:0
1_cent_coins:2
但是我得到这个:
€20欧元:2张
10欧元纸币:1
5欧元纸币:0
1欧元纸币:2
25_cent_coins:0
10_cent_coins:1
5_cent_coins:0
1_cent_coins:2
您完全不必担心会舍入这些数字。 默认情况下,如果将两个数字相除并将其强制转换/转换为int
,则它们将自动成为商的底限。
换句话说,如果执行(int) (32.12/20)
,您将获得1的返还。 这是正确的,因为只有1 20欧元的现钞存在。 如果您(int) (39.99/20)
,因为也只有一个20欧元的钞票存在。
您可以使用此信息来确定所需的特定金额; 更重要的是,他们并不需要被存储在一个float
在所有因为他们是整数。
以下是在何处可以执行此操作的示例。 我将其余的值留给读者练习。
int twentyEuro;
float change;
change = Float.parseFloat(args[0]); //read the change from the command line
twentyEuro = (int) (change / 20);
change = change - twentyEuro * 20;
System.out.println("€20 bill: " + twentyEuro);
System.out.println(change);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.