如何在零钱计算器程序中花2.30美元找对零钱

how can i get the right change for $2.30 in change calculator program?

本文关键字:零钱 美元 计算器 程序      更新时间:2023-10-16

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