我写了这个改变计算器,除了输入$ 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;
}
答案 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);
}