我在一个简单的程序中对双打的分工有点麻烦我正在努力,我似乎无法弄清楚我哪里出错了。我怀疑它与C ++处理浮点或算法的划分方式有关。
波纹管摘要表示接受物品购买金额以及客户支付的金额。然后,该计划必须采取剩余的更改并将其分配到各种票据/账单金额(例如10美元,5美元)以及剩余的美分。我已将这些音符值放在数组中。
#include <iostream>
using namespace std;
int main()
{
double purchAmount, payAmount, change;
int div;
const int arrSize = 8;
float arrBills[arrSize] = {10, 5, 1, 0.5, 0.2, 0.1, 0.05, 0.01};
cout << "Input Total Purchase Amount:";
cin >> purchAmount;
cout << "Input Total Amount Submitted:";
cin >> payAmount;
change = payAmount - purchAmount;
if (change<0)
{
cout << "Customer under-payed!";
}
else {
for (int i=0; i<arrSize; i++)
{
div = change/arrBills[i];
change = change - arrBills[i]*div;
cout << div << " " << arrBills[i] << "$ Bills" << endl;
}
}
return 0;
}
我遇到的问题是,尽管每个音符值都正确,但最后一分(0.01)的结果总是低于应有的值。
以下是一个示例输出,说明了这一点:
Input Total Purchase Amount:100
Input Total Amount Submitted:116.67
1 10$ Bills
1 5$ Bills
1 1$ Bills
1 0.5$ Bills
0 0.2$ Bills
1 0.1$ Bills
1 0.05$ Bills
1 0.01$ Bills