Reveniți la programul de schimbare a zecimalei c++ (Programare, C++, Zecimal, Monedă De Schimb)

captaincp a intrebat.

Un exercițiu pentru cursul meu de programare ne cere să scriem un program pentru un casier care să solicite suma de bani datorată și suma de bani primită și să calculeze restul. De asemenea, programul trebuie să calculeze cantitatea de dolari, sferturi, monede de 10, 10 cenți, 5 cenți și penny necesară. Funcționează bine până când ajunge la monedele de 10, 5 și 10 cenți. Aici este momentul în care ieșirea devine ciudată. Am observat, de asemenea, că Visual Studio citește 0,10 ca fiind 0,100000000000000000000000056. Același lucru se întâmplă cu monedele de 5 cenți și monedele de 25 de cenți, dar acest lucru nu se întâmplă în cazul dolarilor sau al sferturilor de dolar. Am încercat câteva moduri diferite de a rezolva problema, dar nu am avut noroc. Orice sugestie

cout << "Amount Due. 
";
double due;
cout << "$";
    cin >> due;

cout << "Amount recieved. 
";
double rec;
cout << "$";
    cin >> rec;

double change = (rec - due);
cout << "Total change= $" << change << " 
";

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 << " 
";
cout << "Number of quarters: " << quarters << " 
";
cout << "Number of dimes: " << dimes << " 
";
cout << "Number of nickels: " << nickels << " 
";
cout << "Number of pennies: " << pennies << " 
";

return 0;

}

Comentarii

  • Posibil duplicat al exemplelor de inexactitate a punctului flotant –  > Por Charles.
1 răspunsuri
Oscar Chambers
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;
    }
}

The continue keyword pornește bucla din nou de la început. această implementare este rezistentă la impreciziile în virgulă mobilă.