我编写了这个更改计算器,除了输入$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;
}
问题是您正在使用double对arithmetics
进行模运算。这并不可靠。您可以将changeAmount
的类型更改为int
以使示例工作。(您可能需要引入第二个变量来存储从输入中读取的双倍值。)
编译它,看看会发生什么:
changeAmount = changeAmount * 100;
cout <<"The change amount is $" <<changeAmount <<" ." <<endl; //230
changeAmount = int(changeAmount);
cout <<"The change amount is $" <<changeAmount <<" ." <<endl; //229
问题在于小数在系统中的存储方式。2.30存储为2.29…。当你乘以100并取整数部分时,你得到229。当乘以100时,请确保使用舍入函数进行舍入。请确保包含数学库。
else
{
changeAmount = round(changeAmount * 100);
changeAmount = int(changeAmount);
}