Упражнение для моего класса программирования требует, чтобы мы написали программу для кассира, которая запрашивает сумму причитающейся суммы и полученную сумму и рассчитывает изменение. Он также должен рассчитать количество долларов, кварталов, десять центов, никелей и пенни. Он отлично работает до тех пор, пока не достигнет ни цента, никеля и ни копейки. Вот где результат становится шатким. Я также заметил, что visual studio читает 0.10 как .1000000000000000056. То же самое с никелями и копейками, но этого не происходит с долларами или четвертями. Я пробовал несколько разных способов исправить это, но мне не повезло. Какие-либо предложения
cout << "Amount Due. \n";
double due;
cout << "$";
cin >> due;
cout << "Amount recieved. \n";
double rec;
cout << "$";
cin >> rec;
double change = (rec - due);
cout << "Total change= $" << change << " \n";
int dollars = change / 1.00;
change = change - dollars;
int quarters = change / .25;
change = change - quarters;
int dimes = change / .10;
change = change - dimes;
int nickels = change / .05;
change = change - nickels;
int pennies = change / .01;
change = change - pennies;
cout << "Number of dollars: " << dollars << " \n";
cout << "Number of quarters: " << quarters << " \n";
cout << "Number of dimes: " << dimes << " \n";
cout << "Number of nickels: " << nickels << " \n";
cout << "Number of pennies: " << pennies << " \n";
return 0;
}
while(change > 0){
if(change >= 1.00){
dollars ++;
change -= 1;
continue;
}
if(change >= 0.25){
quarters ++;
change -= 0.25;
continue;
}
if(change >= 0.10){
dimes ++;
change -= 0.1;
continue;
}
if(change >= 0.05){
nickels ++;
change -= 0.05;
continue;
}
if(change >= 0.01){
pennies ++;
change -= 0.01;
continue;
}
}
continue
Ключевое слово снова запускает цикл сверху.
Эта реализация устойчива к неточностям с плавающей запятой.
Других решений пока нет …