Rundungsfehler



  • Hmm....

    Mal ne blöde Frage:
    Warum kann ich in ne Textbox 0,6 eingeben, wenn ich die dann einer DOUBLE-Variablen zuweis (mit Convert::ToDouble(......)), steht in der plötzlich nur noch 0,59999999... drinne?
    Und kann man das irgendwie verhindern?



  • NewtonsLaw schrieb:

    Warum kann ich in ne Textbox 0,6 eingeben, wenn ich die dann einer DOUBLE-Variablen zuweis (mit Convert::ToDouble(......)), steht in der plötzlich nur noch 0,59999999... drinne?

    Weil der Wert 0,6 nicht exakt in einer double-Variablen untergebracht werden kann.

    Und kann man das irgendwie verhindern?

    Nein - aber du kannst den Wert für Ausgaben wieder auf eine Stelle runden, dann fällt der Unterschied nicht mehr auf.



  • Hmmmm.....

    Das ist aber ziemlich doof, brauch nämlich genau die 0,6 für meine restlichen Berechnungen .....

    @CStoll:
    Liegt das an der Mantisse? Oder an was? Versteh nicht ganz, warum 0,6 nicht in ein DOUBLE-Wert passt, 0,5999.... dagegen schon?!?!??

    Merci schon mal!



  • Verwende "System::Decimal"!



  • NewtonsLaw schrieb:

    @CStoll:
    Liegt das an der Mantisse? Oder an was? Versteh nicht ganz, warum 0,6 nicht in ein DOUBLE-Wert passt, 0,5999.... dagegen schon?!?!??

    Ja, das liegt an der Mantisse - die wird in Binärformat gespeichert und da ergibt 0,6 einen periodischen "Binärbruch", der irgendwann abgeschnitten werden muß, weil der double zu Ende ist (und 0,5999... ist die nächstkleinere darstellbare Zahl).


Anmelden zum Antworten