Java 收银机返回剩余金额加上二次付款的变动
我认为我的回答是正确的,但当我尝试在我的收银机中拆分付款时,它在第二次和第一次付款时都返回了正确的零钱,但在第二次付款时,它包含了我放置的第三个if对账单,并且它也给出了零钱 例如:Java 收银机返回剩余金额加上二次付款的变动,java,if-statement,Java,If Statement,我认为我的回答是正确的,但当我尝试在我的收银机中拆分付款时,它在第二次和第一次付款时都返回了正确的零钱,但在第二次付款时,它包含了我放置的第三个if对账单,并且它也给出了零钱 例如: Price: $100.00 Sales tax = $6.00 Total amount due = $106.00 Payment = $50.00 Amount Remaining: $56.00 Payment $50.00 Amount Remaining: $6.00 Your Change Is: $
Price: $100.00
Sales tax = $6.00
Total amount due = $106.00
Payment = $50.00
Amount Remaining: $56.00
Payment $50.00
Amount Remaining: $6.00
Your Change Is: $44.00
下面是有问题的代码段。感谢您的帮助
public void makePayment (double payment){
if (payment < 0){
System.out.println("Insufficient Funds. Please Use Another Method Of Payment");
}
if (payment < currentAmountDue ){
currentAmountDue = currentAmountDue - payment;
System.out.println("Amount Remaining: " + fmt.format(currentAmountDue));
dailySales = currentAmountDue + dailySales;
}
if (payment > currentAmountDue){
dailySales = dailySales + currentAmountDue;
currentAmountDue = payment - currentAmountDue;
System.out.println("Your Change Is: " + fmt.format(currentAmountDue));
numberOfCustomers = numberOfCustomers + 1;
dailySales = currentAmountDue + dailySales;
}
if (payment == currentAmountDue){
dailySales = dailySales + currentAmountDue;
numberOfCustomers = numberOfCustomers + 1;
currentAmountDue = 0;
System.out.println("Thank you for your money!");
}
}
如果您仔细查看第二次付款的代码,就很容易发现 在输入currentAmountDue=56和payment=50时,因此 现在currentAmountDue=6,payment=50,执行下一个if语句:
if (payment > currentAmountDue){
这也被认为是正确的
您可能只希望执行一个if分支,因此最好将除第一个if之外的所有if都更改为else if。永远不要使用==来比较double。因为不能用浮点数精确地表示所有数字,当你在数学上期望数字相等时,这很可能会失败。通常使用任何类型的浮点变量来存储货币量都是一个坏主意…最好使用int或long来存储货币,并使用小数点后两位数字,这将更好地确保准确性。非常感谢您的帮助!我是一名通信专业的学生,试图拓宽他们的视野,所以谢谢你的帮助!现在这就更有意义了。那么现在currentAmountDue=56,我想你的意思是在if语句完成后它将是currentAmountDue=6?从而满足下一个if语句
currentAmountDue = currentAmountDue - payment;
if (payment > currentAmountDue){