cout << fixed und cout.precision(0)?
-
Hallo,
seit dem 1.9 mache ich eine Ausbildung zum Fachinformatiker für Systemintegration. Bin gerade am üben für ne Arbeit am Mittwoch. Ich hab allerdings ein Problem.
Pro 10€ Einkauf gibt es einen Punkt, also 38,90€ -> 3 Punkte
Wie krieg ich Variable Preis so hin, das ich die Punkte ausrechnen kann.
38,90/10 = 3,89 und dann cout << fixed und cout.precision(0) hätte ich ja 3, aber damit hab ich ja nur die Ausgabe verändert aber der Wert bleibt bei 38,90,also kann ich nicht damit rechnen. Ich entschuldige mich für die unverständliche Ausdrucksweise.Aufgabe:http://s1.bild.me/bilder/030611/9837951c__.JPG
Mein Code:#include <iostream> using namespace std; int main() { double preis,punkte; char karte; cout <<"Geben sie den Preis ein\n"; cin >> preis; cout <<"Besitzen sie eine Kundenkarte? A,B,C? Wenn nicht, geben sie "S" ein"; cin >> karte; cout <<"Wieviel Punkte besitzen sie?"; cin >> punkte; switch(karte) { case 'a': case 'A': karte = 2; break; case 'b': case 'B': karte = 1; break; case 'c': case 'C': karte = 0.5; break; case 's': case 'S': karte = 1; break; }
Bei Punkt 5 habe ich Schwierigkeiten. Eigentlich hätte ich es über cout << fixed und cout.precision(0) gemacht, aber das ist ja nur für die Ausgabe, aber ich will ja mit den 3 Punkten bez. 38,90€ rechnen. Bin noch nicht der Vollprofi wie ihr bestimmt merkt
Vielen Dank/E: mit cout.precision hätte ich ja immer noch 38 und nicht 3... damit gehts also nicht
-
int neuepunkte = preis / 10;
Bei Zuweisung eines Gleitkommawertes an eine int werden die Nachkommastellen abgeschnitten.
PS: karte = 0.5 => karte ist 0. Gleicher Effekt wie oben, weil char ein integer ist.
-
Vielen vielen Dank Caligulaminus!! Genauso hab ich es mir vorgestellt
C++ meckert jetzt natürlich rum "warning C4244: '=': Konvertierung von 'float' in 'int', möglicher Datenverlust"
Aber ich hab ja nicht vor von int in float zu konvertieren
-
Kannst es ja noch als (int) casten und dann wird auch nicht mehr gemeckert ^^
-
Um hier mal den üblichen "Ihhh Geld als double" Flame auszupacken: Geld ist keine Fließkommazahl!!
Fließkommazahlen (float, double, long double) willst du immer dann haben, wenn du eine theoretisch unendliche Genauigkeit haben möchtest. Also wenn kein logisches kleinstes Teil existiert. Das ist bei Geld aber nicht der Fall, es gibt Cent. Also: Geld stellt man lieber als Ganzzahl (int) in Cent dar.
(Warum man Fließkommazahlen nicht benutzen sollte? Weil sie ungenau sind.)
Für die "Karten" musst du dir dann halt ganze Werte überlegen, aber das sollte kein Problem sein.
-
Casten hatten wir noch nicht.
So siehts jetzt aus.
#include <iostream> using namespace std; int main() { float preis,punkte,kartenwert,topay; char karte; int neuepunkte; cout <<"Geben sie den Preis ein\n"; cin >> preis; cout <<"Besitzen sie eine Kundenkarte? A,B,C? Wenn nicht, geben sie S ein\n"; cin >> karte; cout <<"Wieviel Punkte besitzen sie?\n"; cin >> punkte; switch(karte) { case 'a': case 'A': karte = 'a'; kartenwert = 98; break; case 'b': case 'B': karte = 'b'; kartenwert = 99; break; case 'c': case 'C': karte = 'c'; kartenwert = 99.5; break; case 's': case 'S': karte = 's'; kartenwert = 100; break; } topay = preis / 100 * kartenwert; neuepunkte = preis / 10; if(punkte == 555 && karte != 's') {neuepunkte = 44 + neuepunkte;} if(karte == 'a' || karte == 'b' && punkte > 1000) {neuepunkte = 50 + neuepunkte;} if(karte == 'c' && punkte > 500) {neuepunkte = 10 + neuepunkte;} punkte = neuepunkte + punkte; cout <<"Sie müssen bezahlen: "<<topay<< "\n"; cout <<"Ihre Punkte: "<< punkte<< "\n"; cout <<"Status ihrer Karte: "<< karte << "\n"; return 0; }