Float wird ohne Nachkommastellen ausgegeben!?



  • Hi! Ich habe schon lange nicht mehr sprintf verwendet. Als ich es letztemal doch wieder tat, verstand ich die Welt nicht mehr... 😮

    #include <stdlib.h>
    #include <stdio.h>
    
    int main(void)
    { 
        char szBuffer[32];
        float fNumber = 1 / 2 ;
    
        sprintf(szBuffer, "%f", fNumber );
    
        puts (szBuffer) ;
    
        system ("PAUSE") ;
        return EXIT_SUCCESS ;
    }
    

    Wieso wird 0.000000 ausgegeben? Wird 1 / 2 gar nicht ausgewertet oder gerundet?
    Werde ich langsam verrückt oder gibt es einen rationalen Grund? Schonmal im Voraus Entschuldigung für diese dumme Frage. Nur ist das etwas sehr elementares und ich würde schon gerne wissen was daran falsch ist!

    MfG WilMen



  • "1" und "2" sind int. Das Ergebnis der Division ist dann schon mal "nix" 🙂

    f = 1.0 / 2.0 oder cast sollte das dann tun.



  • Danke für deine schnelle Antwort! Ich finde das ein bisschen komisch, dass der Compiler in diesem Fall nicht implizit/automatisch castet 😮. Mit Casten funktionierts jetzt auf jeden Fall und meine Welt ist wieder in Ordnung. 😃

    MfG WilMen



  • Compiler sind halt auch mal doof 🙂



  • Wieso sollte der Compiler auch nach float casten, wenn du zwei Ganzzahlen durcheinander teilst? Automatisch gecastet wird nur, wenn eine der beiden Zahl ein float ist (1.0f/2 würde also schon reichen).



  • bei 1.5 / 2 würde ich mich aber nicht darauf verlassen dass die 2 zu 2.0 gecastet wird. kann ja auch 1.5 zu 1 sein 😉
    Das da eine Division steht impliziert nie dass double die Wahl des Compilers ist.



  • Nanyuki schrieb:

    Wieso sollte der Compiler auch nach float casten, wenn du zwei Ganzzahlen durcheinander teilst? Automatisch gecastet wird nur, wenn eine der beiden Zahl ein float ist (1.0f/2 würde also schon reichen).

    Er castet doch, halt erst nach der Division 🙂



  • double x=  (double)1 / (double)2;
    

    eben



  • NMCM schrieb:

    bei 1.5 / 2 würde ich mich aber nicht darauf verlassen dass die 2 zu 2.0 gecastet wird. kann ja auch 1.5 zu 1 sein 😉
    Das da eine Division steht impliziert nie dass double die Wahl des Compilers ist.

    Nein, aber es wird in den größten involvierten Typ gecastet. In diesem Beispiel ist das double.


Anmelden zum Antworten