[英]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.