Как мне получить правильную сумму сдачи?
Мне нужно определить проблему в моем коде, это программа покупки билетов, и я предполагаю, что получаю сдачу, но вычисляется неправильная сумма, и я не могу понять почему. Вот код:
// Author: John Moye // Source file: amuseProj.cpp // Description: Amusement Park Project // IDE used: XCode #include <iostream> #include <iomanip> using namespace std; // Constants const double CHILDPRICE = 12.00; const double ADULTPRICE = 20.50; int main () { // integers int childTix; double childTotal; double changeTotal; int adultTix; double totalBill; double adultTotal; double cashReceived; int ticketTotal; int confirmN; //title cout << "\n Chesapeake Amusement Park" << endl << endl; cout << "\n Enter children tickets (enter -1 to stop)...."; confirmN= 99; cin >>childTix; while (childTix > 0) { childTix = childTix - (childTix/4); cout << "\n Enter adult tickets..."; cin >>adultTix; adultTotal = (adultTix * ADULTPRICE) - 3; confirmN ++; ticketTotal = adultTix + childTix; childTotal = childTix * CHILDPRICE; adultTotal = adultTix * ADULTPRICE; totalBill = adultTotal + childTotal; cout.setf(ios::fixed); cout.setf(ios::showpoint); cout.precision(2); cout << "\n\n Chesapeake Amusement Park"; cout << "\n -------------------------"; cout << "\n\n Tickets Price Total\n"; cout << " Children " << setw(3) << childTix << setw(14) << CHILDPRICE << setw(11) << childTotal; cout << "\n Adults " << setw(3) << adultTix << setw(14) << ADULTPRICE << setw(11) << adultTotal; cout <<"\n\n Total Tickets:" << setw(3) << ticketTotal; if ( (ticketTotal > 20) || (childTix >= 14)) cout << "\n\n Total Bill... "<< setw(11) << totalBill+15; else cout << "\n\n Total Bill... " << setw(11) <<totalBill; cout << "\n\n Enter the amount you're going to pay:"; cin >>cashReceived; cout << "\n\n Cash Received "<< setw(11) <<cashReceived; do { cout << "\n\n Cash received is not enough, please give the total amount"; cin >> cashReceived; } while (cashReceived < totalBill); cout << " \n\n Thank you"; changeTotal = cashReceived - totalBill; cout << "\n\n Change " << setw(11) << changeTotal; cout << "\n\n Confirmation Number: " << setw(11) << confirmN; cout << "\n\n Enter children tickets (enter -1 to stop)...." << setw(11); cin >> childTix; } cout << "\n\n Come back again soon " << setw(11); return 0; }[edit]добавлен блок кода-OriginalGriff [/edit]
Что я уже пробовал:
Я пробовал делать новые дубли и перемещать код в разные места
Richard MacCutchan
Не используйте двойные типы для финансовых приложений, они по своей сути неточны. Используйте десятичные типы, если они доступны, или целые числа, где каждое значение преобразуется в самый низкий тип денег (например, центы, пайсы и т. д.).