Konvertierung double->int



  • Hi!

    Meine Frage betrifft wohl eher ANSI C, auch wenn der Anlass in einem C++-Programm steckt:

    Ich habe eine Funktion definiert:

    uint32 randIntScale( const uint32& n ) {uint32 rc = Mrand()*n; return rc;} // integer in [0,n]
    

    Mrand() liefert eine double-Zufallszahl [0..1].

    Da bringt der Compiler (zu Recht) folgende Warnung

    bla.h:104: Warnung: initialization to `unsigned int' from `double'
    bla.h:104: Warnung: argument to `unsigned int' from `double'
    

    Da das Ergebnis nie >n werden kann, stört mich die Warnung dann doch - wie bekomme ich die weg?



  • Mache einen expliziten Cast um damit dem Compiler zu sagen:
    Keine Sorge, ich weiß, was ich tue.

    uint32 rc = (uint32)Mrand()*n;
    

    Besser ist vermutlich:

    uint32 rc = (uint32)(Mrand()*n);
    

    So wird es erst in Ganzahlen umgewandelt, nachdem mit n multipliziert wurde.
    Oben wird erst das Ergebnis von Mran runtergerundet und dann mit n multipliziert.



  • Danke! 🙂


Anmelden zum Antworten