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).