计算付款

时间:2014-11-26 13:24:59

标签: c++

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";
}

2 个答案:

答案 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";
}