我有一些C++作业,但一直受到一些意想不到的行为的困扰.以下代码是相关程序的一部分:
void tenderMoney(Candy& _Candy, CoinCount& _Coins){
const double amountToPay = _Candy._Price;
int coinTendered = 0;
double totalTendered = 0;
do {
cout << "Insert a coin: ";
if (cin >> coinTendered){
switch (coinTendered){
case 5: {
totalTendered += 0.05;
_Coins._Nickels++;
break;
}
case 10: {
totalTendered += 0.10;
_Coins._Dimes++;
break;
}
case 25: {
totalTendered += 0.25;
_Coins._Quarters++;
break;
}
default:
break;
}
}
else {
cout << "Invalid coin. ";
cin.clear();
cin.ignore();
}
} while (totalTendered < amountToPay);
}
Run Code Online (Sandbox Code Playgroud)
这适用于所有硬币,但0.05美分.即使在(totalTendered < amountToPay)评估相等的值时,它也会要求额外的硬币.任何可以解释我的问题可能是什么的人?
注意:正在从各自的vector容器中引用对象.您可以随意申请任何您认为相关的其他代码.
你有点浮点舍入错误.使用a int来跟踪分数,而不是使用a double来跟踪美元.
更详细地说,问题是值0.05不能精确地用二进制浮点表示.它可能真的是0.0499999999999,这不是你想要的.当你把它与你的目标值进行比较时,比较是"是的,那就是更少",甚至认为它可能只有0.0000000000001分.
| 归档时间: |
|
| 查看次数: |
58 次 |
| 最近记录: |