[英]Unexpected DO-WHILE behavior: Is it ignoring the expression?
我有一些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);
}
该功能适用于除.05美分以外的所有硬币。 即使(totalTendered < amountToPay)
计算为相等的值,它也会要求额外的硬币。 任何人都可以弄清楚我的问题可能是什么?
注意:对象是从它们各自的vector
容器中引用的。 随意请求您可能认为相关的任何其他代码。
您被浮点数舍入错误所困扰 。 使用int
跟踪美分数 ,而不是使用double
跟踪美元。
更具体地说,问题是值0.05不能精确地用二进制浮点表示。 可能确实是0.0499999999999,这并不是您想要的。 当您将其与目标值进行比较时,比较结果是“是的,即更少”,甚至认为它可能仅减少0.0000000000001美分。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.