Java 收银机返回剩余金额加上二次付款的变动

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: $

我认为我的回答是正确的,但当我尝试在我的收银机中拆分付款时,它在第二次和第一次付款时都返回了正确的零钱,但在第二次付款时,它包含了我放置的第三个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: $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){