繁体   English   中英

用Java为收银员编写代码。 使用math.round可以给我带来更多的收益,而使用math.floor有时会给我带来更少的收益?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM