Probleme mit double/float Ausgabe



  • Hallo,

    Ich hab das Problem, dass double/float.toString() etwas seltsame
    Ausgaben erzeugt.

    bank.DecBetrag(0.2);
                Guthaben_Int_lbl.Text = bank.Guthaben.ToString();
    

    Das Startguthaben beträgt 10.
    Ausgegeben wird 9.8, 9.6, 9.4 etc ab 8,6 gibt er dann aus 8,60000000001
    bis 5.60000000001, danach gehts weiter mit 5.4, 5.2 etc,
    ab 0.8 gibt der dann aus 0.80000000002 bis hin zum Wert 0.20000000002, da kommt
    dann meine Abbruchbedingung.

    Wie kommt es zu solchen komischen Ausgaben?



  • Lies Dir in der Wikipedia mal den Artikel zu Gleitkommazahlen durch, das sollte für Klarheit sorgen.

    Kurzfassung: Gleitkommazahlen speichern den Wert nicht dezimal oder binär. Bei der notwendigen Konversion für die Ausgabe kann es zu Fehlern kommen, weil nicht jeder Dezimalbruch als endlicher Binärbruch darstellbar ist, und umgekehrt. Da aber nur endliche Bestandteile gespeichert werden, ist die Abbildung stehts ungenau.

    Hinzu kommen dann noch Rundungsfehler durch die begrenzte Genauigkeit, die aber in Deinem Fall keine Rolle spielen.

    Dein Problem kannst Du umgehen, indem Du beim Aufruf der 'ToString'-Methode entsprechende Formatparameter übergibst (=> MSDN).



  • Danke für die Antwort,
    leuchtet ein ja, wundert mich nur trozdem, zumindest bei
    meiner Anwendung, da ich ja nur einfache Ergebniss habe,
    aber egal mit der Formatierung klappt es.



  • Für Geldbeträge macht statt double/float evtl. decimal mehr Sinn.



  • Aye, stimmt jetzt wo du es sagst. 🙂
    Hab ich nich drauf geachtet, dass es den auch in c# gibt,
    kannte den nur aus SQL.


Anmelden zum Antworten