seltsamer Fehler bei Type-Convert
-
moin leutz,
hab nen prob bei einem TypeConvert ...
Unten eingefügter code soll einen Automaten simulieren, welcher Restgeld ausgiebt bzw. den Einwurf überwacht .....
bei einem zu zahlenden Betrag von z.Bsp 12.56 EUR tritt ein mir unerklärlicher fehler auf:[screenprint]
Betrag: 12.56
Eingabe - max. 10 Euro: 10
Es fehlen noch -2.56
1
Bereits gezahlt: 11
Es fehlen noch -1.56
1
Bereits gezahlt: 12
Es fehlen noch -0.56
.50
Bereits gezahlt: 12.5
Es fehlen noch -0.06
.10
Bereits gezahlt: 12.6
Retour: 0.04
Retour in Cent vor Uebergabe an Funktion Berechnung :40
Uebergabewert als Integer:39
Cent Retour uebernommen von Umwandlung in cent : 39
Reste: 1 39
Cent Retour uebernommen von Umwandlung in cent : 39
Reste: 2 39
Cent Retour uebernommen von Umwandlung in cent : 39
Reste: 3 39
Cent Retour uebernommen von Umwandlung in cent : 39
Reste: 4 39
Cent Retour uebernommen von Umwandlung in cent : 39
Reste: 5 19
Cent Retour uebernommen von Umwandlung in cent : 19
Reste: 6 9
Cent Retour uebernommen von Umwandlung in cent : 9
Reste: 7 4
Cent Retour uebernommen von Umwandlung in cent : 4
Reste: 8 0
Cent Retour uebernommen von Umwandlung in cent : 0
Reste: 9 0
1 * 20 Cent
1 * 10 Cent
1 * 5 Cent
2 * 2 Cent
[/screenprint]die ratte macht aus zum Beispiel double dZahl = 440.00
bei Wandlung zu Integer rotzfrech eine 439..... dolle sache ....stehe leider noch ziemlich am anfang meiner c++ Kenntnisse
ich verwende MS-Visual C++Automat.cpp 6.9.04 #include <iostream.h> int eingabe(); int berechnungen(int,int*); int rueckgabe(int *); ////////////////////////Hauptprogramm//////////////////////// int main() { int anzahl[9]; //cout.setf(ios::fixed); //cout.precision(2); berechnungen(eingabe(), anzahl); rueckgabe(anzahl); return 0; } ////////////////////// Funktionsdefinitionen //////////////////// int eingabe() { double betrag, eingabe, retour; cout<<"Betrag: "; cin>>betrag; do { cout<<"Eingabe - max. 10 Euro: "; cin>>eingabe; }while(eingabe > 10); double test = eingabe; while(eingabe < betrag) { double nachZahlung; cout<<"Es fehlen noch "<<eingabe - betrag<<endl; cin >> nachZahlung; betrag = betrag - nachZahlung; test += nachZahlung; cout<<"Bereits gezahlt: "<<test<<endl; } retour = eingabe - betrag; cout<<"Retour: "<<retour<<endl; // Umrechnung in Cent double centRetour = retour * 1000; //hoch gerechnet um Stellen zu erhöhen! (default = 100) cout<<"Retour in Cent vor Uebergabe an Funktion Berechnung :"<<centRetour<<endl; int uebergabewert = int(centRetour); cout<<"Uebergabewert als Integer:"<<uebergabewert<<endl; return uebergabewert; } int berechnungen(int centRetour, int *anzahl) { // Reste berechnen int einheiten[9]={500,200,100,50,20,10,5,2,1}; int rest[9]; for(int i = 0; i < 9; i++) { cout<<"Cent Retour uebernommen von Umwandlung in cent : "<<centRetour<<endl; rest[i] = centRetour % einheiten[i]; anzahl[i] = centRetour / einheiten[i]; centRetour = rest[i]; cout<<"Reste: "<<i+1<<" "<<rest[i]<<endl; } return 0; } int rueckgabe( int *anzahl) { int einheiten2[9]={5,2,1,50,20,10,500,200,100}; for(int i = 0; i < 9; i++) { //cout<<"rest "<<einheiten2[i]<<endl; if(anzahl[i] > 0) { if(einheiten2[i] < 10) cout<<anzahl[i]<<" * "<<einheiten2[i] <<" Euro"<<endl; if(einheiten2[i] >= 10 && einheiten2[i] <=50) cout<<anzahl[i]<<" * "<<einheiten2[i] <<" Cent"<<endl; else cout<<anzahl[i]<<" * "<<einheiten2[i]/100 <<" Cent"<<endl; } } return 0; return 0; }
-
Ich glaube deine Auswertung stimmt auch nicht. Wenn ich 12.20 zahlen muss und 13 bezahlt bekomme ich über 8 zurück