gpt4 book ai didi

java - 用java编写收银员代码。使用 math.round 它给我更多,而使用 math.floor 有时更少我应该做什么?

转载 作者:行者123 更新时间:2023-12-01 09:20:32 24 4
gpt4 key购买 nike

我需要编写一个 java 程序来计算销售交易的找零。

它只能分配 20 枚、10 枚、5 枚、1 枚、25 美分、10 角硬币、5 分硬币和 1 便士硬币。

我做到了,一切都好,但我有一个问题。当我把 math.round 放在一些数字上时,它们会像 20 欧元中的 1.6 一样四舍五入,并且会带来错误的零钱。如果我把 math.floor 放在硬币后面,它就会减少。我做错了什么?这是我的代码:

公共(public)类 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

}//结束类(class)

我输入了 32.12,我期望

20 欧元账单:1

10 欧元钞票:1

5 欧元账单:0

1 欧元账单:2

25_cent_coins:0

10_cent_coins:1

5_cent_coins:0

1_c​​ent_coins:2

但我明白了:

20 欧元账单:2

10 欧元钞票:1

5 欧元账单:0

1 欧元账单:2

25_cent_coins:0

10_cent_coins:1

5_cent_coins:0

1_c​​ent_coins:2

最佳答案

您根本不必担心对这些数字进行四舍五入;默认情况下,如果您将两个数字相除并将它们强制转换/强制为 int,它们将自动成为商的下限。

换句话说,如果您执行(int) (32.12/20),您将得到 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);

关于java - 用java编写收银员代码。使用 math.round 它给我更多,而使用 math.floor 有时更少我应该做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40195323/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com