Nachkommateil bei Ganzzahldivision
-
Hallo,
hab mal ne blöde Frage:
Ich dividiere x durch y wobei x > y und y ungleich 0
Wie ermittle ich nur den Nachkommateil dieser Division!
Als Vorgabe ist eine einzige Anweisung erlaubt!Habs mit: x % y / y probiert aber das klappt so nicht (wg Rang des Operators oder so!)

-
dann setz doch KLammern

(x % y) / yedit: wenn das beides ints sind musst du aber ne Konvertierung zu float oder double machen, ansonsten kommt immer 0 raus
-
also so
int x = 4; int y = 5; double z = (x % y) / (double)y;für C++ Puristen:
int x = 4; int y = 5; double z = (x % y) / static_cast<double>(y);
-
Pellaeon schrieb:
(x % y) / yDas dürfte noch nicht so ganz klappen, da es immer noch Ganzzahl-Division verwendet

@Rookie: Was genau willst du denn haben?
- "x % y" - liefert den Rest der Division
- "x / y" - liefert den ganzzahligen Anteil des Quotienten
- "double(x%y)/y" - liefert den Nachkommaanteil des Quotienten
(wichtig ist die Angabe, daß er mit Gleitkommazahlen (double) rechnen soll) - "(x%y)/y" - dürfte eigentlich generell 0 zurückgeben
Edit: Da war Pellaeon schneller, seinen Fehler zu korrigieren

-
CStoll schrieb:
Pellaeon schrieb:
(x % y) / yDas dürfte noch nicht so ganz klappen, da es immer noch Ganzzahl-Division verwendet

Lies Edit und meinen Post darunter.

Das klappt, habs auch gestestetedit: CStoll hat edit gemacht

-
Pellaeon schrieb:
also so
int x = 4; int y = 5; double z = (x % y) / (double)y;für C++ Puristen:
int x = 4; int y = 5; double z = (x % y) / static_cast<double>(y);nein. in c++ schreibt man
int x = 4;
int y = 5;
double z = double(x % y) / y;
-
Wo is da der Unterschied, wenn man das double um den Zähler und nicht um den Nenner macht?
-
Vielen Dank für die schnelle Hilfe!

Das klappt so!
int x = 4;
int y = 5;
double z = (x % y) / (double)y;Hatte die Klammer (double) vergessen und dann liefert er immer Null!
Übrigens braucht man x % y nicht in Klmmern setzen, funzt auch ohne!
Gibts eigentlich eine ellegantere Lösung für die Ermittlung des Nachkommaanteils einer Ganzzahldivision? Einen Operator vielleicht,
oder muss ich das immer so lösen?
-
Einen speziellen Operator dafür gibt es nicht, aber wenn du ganz clever sein willst, definierst du eine eigene Klasse myDouble, die diesen Operator bereitstellt

(oder du bleibst im ganzzahligen Bereich und verwendest den Divisionsrest x%y)