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 ist a 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; ist a und a++ zwar ein int, aber du addierst mit d , 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


Anmelden zum Antworten