Fehlermeldung bei der Übergabe des Return Wertes



  • Hola

    ich habe da ein Problem und Steige nicht dahinter. Folgende Fehlermeldung bekomme ich.

    warning C4244: 'return': Konvertierung von 'double' in 'int', möglicher Datenverlust

    Bei folgendem Code:

    Int32 division(Int32 Zahl1, Int32 Zahl2)
    {
    	Double Ergebnis;
    
    	Ergebnis = safe_cast<Double>(Zahl1 / Zahl2);
    
    	return Ergebnis;
    }
    

    Dort wird die Funktion aufgerufen:

    else if(Operant == '/')
    	{
    		Console::WriteLine("Das Ergebnis aus {0} / {1} lautet: {2}", Zahl1, Zahl2, division(Zahl1, Zahl2));
    	}
    

    Ich danke schoneinmal für eure Hilfe.

    LG

    Sk8te



  • #define Double double
    #define Int32 int
    #define safe_cast static_cast
    

    Willst Du Double?

    Double division(Int32 Zahl1, Int32 Zahl2)
    {
    	Double Ergebnis;
    
    	Ergebnis = safe_cast<Double>(Zahl1) / safe_cast<Double>(Zahl2);
    
    	return Ergebnis;
    }
    

    Oder willst Du Int?

    Int32 division(Int32 Zahl1, Int32 Zahl2)
    {
    	Int32 Ergebnis;
    
    	Ergebnis = Zahl1 / Zahl2;
    
    	return Ergebnis;
    }
    


  • Ich wollte ein Double, da ich ein relativ korrektes Ergebnis haben wollte.

    Ah, ich habe den Fehler entdeckt. Vielen Dank. Ich muss in der Funktion auch Double angeben.

    Aber eins verstehe ich noch nicht.

    Warum funktioniert das hier nicht? Ich habs, meiner Meinung nach, so in meinem Buch gelesen.

    Ergebnis = safe_cast<Double>(Zahl1 / Zahl2);
    

    Er müsste doch theoretisch die Integer Werte in der Klammer zu einem Double umwandel! Oder liege ich da ganz falsch?

    Danke

    lg

    Sk8te



  • Das bringt nichts, weil da bei zahl1/zahl2 zwei Integers beteiligt sind, also ist das Ergebnis auch Integer. Also 20/3=6 und safe_cast<double>(20/3) ist auch nur safe_cast<double>(6).



  • Ah! Okay, Vielen Lieben Dank für die Schnelle und Sehr Kompetente Hilfe.

    Jetzt bin ich wieder ein Stückchen Schlauer.

    Lg

    Sk8te


Anmelden zum Antworten