Alex747 Geschrieben 30. Oktober 2006 Geschrieben 30. Oktober 2006 hallo ich bin noch Anfänger in C++^^ ich würde gern wissen wie ich einen double wert in 2 int werte speichere z.b. double betrag = 5.30; jetzt würd ich gern die 5 in eine int variable namens "euro" und die 30 in eine int variable "cent" speichern! könnt ihr mir sagen wie das geht? danke im vorraus. Zitieren
Klotzkopp Geschrieben 30. Oktober 2006 Geschrieben 30. Oktober 2006 Bei Geldbeträgen ist es nicht empfehlenswert, sie überhaupt in Fließkommatypen wie double zu speichern. 5.3 passt auch gar nicht genau in eine double-Variable hinein. Du könntest den Betrag z.B. in Cent in einer Ganzzahlvariablen speichern. Hast du darauf Einfluss? Zitieren
Alex747 Geschrieben 30. Oktober 2006 Autor Geschrieben 30. Oktober 2006 Es ist so das ich eine Klasse Geld habe die 2 attribute besitzt (int euro, cent;) dan habe ich 3 konstruktoren ausschnitt aus der main Geld a (17, 10); // 17 Euro 10 Cent; Geld b (3.5); // 3 Euro 50 Cent Geld c; // standardmäßig 0 Euro 0 Cent so lautet es in der aufgabenstellung da beim zweiten konstruktor ein double wert übergeben wird muss doch dieser jetzt aufgeteilt werden auf die int werte (euro und cent) oder nicht? ich glaube schon das wir nur diese beiden attribute haben Zitieren
Klotzkopp Geschrieben 30. Oktober 2006 Geschrieben 30. Oktober 2006 Es ist so das ich eine Klasse Geld habe die 2 attribute besitzt (int euro, cent;)Das ist gut. da beim zweiten konstruktor ein double wert übergeben wird muss doch dieser jetzt aufgeteilt werden auf die int werte (euro und cent) oder nicht?Doch, das heißt es. Den ganzzahligen Teil kannst du einfach durch die automatische Typumwandlung ermitteln: euro = int(wert) Beim Centwert ist das etwas komplizierter. Der übliche Weg ist, den Wert mit 100 zu multiplizieren (damit bekommt man den Wert in Cent) und dann mit dem Modulooperator den Rest der Division durch 100 zu ermitteln. Um Fehler durch die "eingebaute" Ungenauigkeit von double zu vermeiden, musst du den Wert aber vorher runden. In welche Richtung, hängt aber vom Vorzeichen des Werts ab: if( wert > 0 ) { cent = int(wert * 100 + .5) % 100; } else { cent = int(wert * 100 - .5) % 100; }[/code] Zitieren
Alex747 Geschrieben 30. Oktober 2006 Autor Geschrieben 30. Oktober 2006 Danke für den tipp ich hätt noch ne frage:D noch ein ausschnitt aus der main Geld Summe = a + b + c; wie soll den die operator+ methode ausschaun? bei mir sieht es so aus Geld Geld::operator +(Geld betrag){ Geld neu; neu.euro = euro + betrag.euro; neu.cent = cent + betrag.cent; return neu; } das stimmt aber nicht denn wenn ich diese methode nochmal aufrufe wird mit den alten werten weiter gerechnet der operator+= ist dafür einfach^^ ich weiss ich hab noch kaum erfahrung in der OOP Zitieren
Klotzkopp Geschrieben 30. Oktober 2006 Geschrieben 30. Oktober 2006 Geld Geld::operator +(Geld betrag) Der operator+ sollte kein Member sein, damit automatische Typumwandlungen auch mit dem linken Operanden möglich sind. Sonst geht zwar:Geld a; Geld b = a + 1.0;[/code] Aber das ginge nicht:[code]Geld a; Geld b = 1.0 + a; Wenn du schon einen operator+= hast, kannst du den operator+ ganz einfach schreiben: Geld operator+(const Geld& lhs, const Geld& rhs) { Geld temp(lhs); temp += rhs; return temp; }[/code] Zitieren
Alex747 Geschrieben 30. Oktober 2006 Autor Geschrieben 30. Oktober 2006 ich weiss nicht was ich falsch gemacht hab aber er schreibt Binaerer Operator '+' hat zu viele Parameter Hab den prototypen auch so angepasst Geld operator+(const Geld& lhs, const Geld& rhs); Zitieren
Klotzkopp Geschrieben 30. Oktober 2006 Geschrieben 30. Oktober 2006 Binaerer Operator '+' hat zu viele Parameter Steht der Operator vielleicht noch als Member in der Klasse? Zitieren
Alex747 Geschrieben 30. Oktober 2006 Autor Geschrieben 30. Oktober 2006 ahh jetzt funzt es danke nochmal für die hilfe Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.