如何在变更计算器程序中以2.30美元获得正确的变化?

时间:2014-09-27 21:39:51

标签: c++

我写了这个改变计算器,除了输入$ 2.30作为changeAmount的值的情况外,一切正常。我该如何解决? 这段代码:

#include <iostream>

using namespace std;

int main()
{
double changeAmount;
int fives;
int ones;
int quarters;
int dimes;
int nickels;
int pennies;
cout <<"*** A Very Simple Change Machine ***" <<endl;
cout <<endl;
cout <<"Enter change amount --> ";
cin >>changeAmount;
cout <<"The change amount is $" <<changeAmount <<" ." <<endl;
cout <<endl;

if (changeAmount < 0)
{
    cout << "Invalid amount." <<endl;
}
else
{

    changeAmount = changeAmount * 100;
    changeAmount = int(changeAmount);

    fives = changeAmount / 500 ;
    changeAmount -= fives * 500;

    ones = changeAmount / 100 ;
    changeAmount -= ones * 100;

    quarters = changeAmount / 25;
    changeAmount -= quarters * 25;

    dimes = changeAmount / 10;
    changeAmount -= dimes * 10;

    nickels = changeAmount / 5;
    changeAmount -= nickels * 5;

    pennies = changeAmount / 1 ;
    changeAmount -= pennies * 1;

    cout <<"Your change is given as :" <<endl;
    cout <<"    $5 bill (s)   : " <<fives <<endl;
    cout <<"    $1 bill (s)   : " <<ones <<endl;
    cout <<"    quarter (s)   : " <<quarters <<endl;
    cout <<"    dime (s)      : " <<dimes <<endl;
    cout <<"    nickel (s)    : " <<nickels <<endl;
    cout <<"    penny (ies)   : " <<pennies <<endl;
}
return 0;
}

3 个答案:

答案 0 :(得分:1)

问题是您使用double进行模arithmetics模式。这不能可靠地工作。您可以将changeAmount的类型更改为int以使示例正常工作。 (您可能希望引入第二个varialbe,它存储来自输入的双重读取。)

答案 1 :(得分:0)

编译它,看看会发生什么:

changeAmount = changeAmount * 100;
cout <<"The change amount is $" <<changeAmount <<" ." <<endl; //230
changeAmount = int(changeAmount);
cout <<"The change amount is $" <<changeAmount <<" ." <<endl; //229

答案 2 :(得分:-1)

问题在于如何在系统中存储小数。 2.30存储为2.29 ....当你乘以100并取整数部分得到229.当乘以100时,确保使用圆函数向上舍入。确保包含数学库。

else
{

    changeAmount = round(changeAmount * 100);
    changeAmount = int(changeAmount);

}
相关问题