Verhalten Rechnung mit double und int
-
Hallo,
es ist mir zwar etwas peinlich diese Frage zu stellen, aber mir ist nicht so richtig klar wieso das Ergebnis bei dieser Rechnung einmal 1 für d ist und für e 1.2 ist.
Kann mir jemand sagen wieso das so ist ?
int a = 5, b = 2, c;
double d = a/3;
double e = (a++ + d)/5;Danke schon mal im Voraus ?
ok ich habe meinen Verständnis Fehler gefunden sry
-
Bei
a/2
ista
ein int und 2 ein int-Literal. Der Compiler macht daraus also eine Integerdivision. Egal welchem Datentyp du das am Ende zuweisen willst. Beim zweiten Fall(a++ + d)/5;
ista
unda++
zwar ein int, aber du addierst mitd
, was ein double ist. Wenn du int zu double addierst, dann wird das Ergebnis zu double "promoted". Bei einer Division durch ein int-Literal wird das int-Literal ebenfalls zu double promoted und es wird eine double-Division (also mit Nachkommastellen) durchgeführt.
-
Um gleich die Frage zu beantworten, wie du das umgehen kannst:
Entweder du machst aus dem a und/oder aus der 3 ein double.double d = (double)a/3; // a wird zu double gecastet //oder double d = a/3. ; // durch den Dezimalpunkt ist das jetzt ein Fließkommaliteral // Natürlich geht auch 3.0
-
Danke ich weiß jetzt wo mein Fehler war