作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一些 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
来跟踪 cents 的数量,而不是使用 double
来跟踪美元。
更详细地说,问题是值 0.05 不能用二进制 float 精确表示。它可能真的是 0.0499999999999,这不是您想要的。当您将此值与您的目标值进行比较时,比较结果是“是的,少了”,甚至认为它可能只少了 0.0000000000001 美分。
关于c++ - 意外的 DO-WHILE 行为 : Is it ignoring the expression?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26223795/
我是一名优秀的程序员,十分优秀!