double total,grandtotal;
double amount, change=0;
total=day* price* noRoom;
grandtotal=total*1.16;
cout<<"\t\tPlease enter your amount:RM";
cin>>amount;
while (amount < grandtotal)
{
cout << "\t\tPlease enter a valid amount:RM";
cin >> amount;
}
change=amount-grandtotal;
if (amount > grandtotal)
{
cout<<"\t\tYour change is: "<<change <<endl;
cout<<"\t\tThank You, Have a nice day! \n";
cout<<"\t\t Please come again \n";
}
else if( amount == grandtotal) //why this statement can't run if my amount is also equal to the grandtotal???
{
cout<<"\t\tThank You, Have a nice day! \n";
cout<<"\t \tPlease come again \n";
}
答案 0 :(得分:1)
您的else if
可能会被执行但很可能不会发生,因为double
值的精确度相对较高,因此会有差异。
如果您将精度设置得更小,例如应该有效。
例如2.11 == 2.11而不是2.15151523 == 2.15151524
This问题可能有助于您这样做。
答案 1 :(得分:1)
我的观察是您正在使用浮点值进行金融交易。这不是一个好主意。浮点数的表示可以是某些浮点值的近似值。使用(长)整数来表示便士/美分会更好,然后在输出函数中表示更大的面额。
这样你的测试就可以了。
在某些情况下,您可能需要比较浮点数然后使用一个非常小的常量浮点值(也许称为epsilon)并进行测试。
if (fabs(amount - grandtotal) < epsilon)
{
cout<<"\t\tThank You, Have a nice day! \n";
cout<<"\t \tPlease come again \n";
}