Float und AnsiString spinnen ;)



  • Hallo.

    float wert=9.10500038146;
    Label11->Caption = wert;
    Label12->Caption = FloatToStrF(wert, ffFixed, 15, 2);
    float test = StrToFloat(FloatToStrF(wert, ffFixed, 15, 2));
    Label13->Caption = test;
    
    //Ausgabe
    // Label1 = 9,10500038146
    // Label2 = 9,11
    // Label3 = 9,10999965667
    

    Warum hat Label3 plötzlich "falschen" Wert? 😮
    Ich möchte mit CBuilder5 doch nur den Float Wert kürzen auf 2 Stellen hinter dem Komma.



  • Weil es bei allen Fließkommazahlentypen bestimmte Werte gibt, die sich in der Mantisse nicht exakt abbilden lassen. 9.11 bei float läßt sich nicht exakt abbilden. Bei double würde es in diesem speziellen Fall funktionieren, aber da tritt dieser Effekt bei anderen Werten auf.

    Mögliche Lösungen:
    - nur int verwenden
    - Zahlen auf z.B. 6 Nachkommastellen runden. (Da war in den letzten Tagen sogar ein entsprechende Frage hier im Forum, mit einer entsprechenden Lösung...)


Anmelden zum Antworten