Problem mit Konvertierung von float zu char



  • Hallo,
    Folgendes Problem:

    char dada[30];
    sprintf(dada, "%f", 150.08);
    cout << dada;
    

    Ausgabe: 150.08

    char dada[30];
    sprintf(dada, "%f", 150.08f); // Man beachte das "f"
    cout << dada;
    

    Ausgabe: 150.080002

    Hää? Kann mir das jemand erklären?



  • Hallo,

    godlikebot schrieb:

    Kann mir das jemand erklären?

    aber klar doch, im ersten Fall nimmt der Compiler eine double-Konstante für 150.08 an, im zweiten wird explizit float gefordert. Da ein double aber aufgrund seiner größeren "Genauigkeit auf Bitebene" Fließkommazahlen genauer speichern kann als ein float, sind auch die entstehenden "Fehler" bei der Umsetzung in die Dezimal-Repräsentation entsprechend geringer (oder wie hier, gar nicht vorhanden), anders ausgedrückt, ein double kann Fließkommazahlen "genauer" speichern als ein float.

    MfG



  • Mit diesem Bit und Byte gedöhnz kenn' ich mich leider noch nicht so gut aus. Werd mich demnächst wohl mal dadrüber informieren müssen.
    Aber jetzt weiss ich wenigstens, dass das normal ist.
    Danke dir!



  • Was ist cout??



  • AJ schrieb:

    Was ist cout??

    Uuups, ich bin eigentlich C++'ler und hab deswegen hier die iostream Funktionen verwendet. Aber ich dachte, weil der Fehler ja bei sprintf zu liegen schien, sollte ich lieber ins C Forum posten.



  • Schon OK 😉


Anmelden zum Antworten