ettette hat geschrieben:tst.jpg
Hallo zusammen,
für eine Interpolation habe ich ein Core-Macro gebaut.
Ich möchte den Wert für eine Aufrundung, den für eine Abrundung und einen Wert wo der ursprüngliche Wert zwischen diesen beiden lag.
Für den Eingang von 950,1 also 950, 951 und 0,1.
Beim addieren vom Integer 951 (oberer Wert) den Float 950,1 abziehe, müsste ich doch 0,9 erhalten.
Ich erhalte aber den Wert 0,900391.
Wieso ist das so.
Wie erreiche ich, dass ich 0,9 erhalte?
Liebe Grüße
Ette
Das liegt daran, dass man die Genauigkeit von float-Zahlen nicht überschätzen darf: maximal 5 Stellen sind einigermaßen genau. Die relative Dichte der Fießkommazahlen ist zwischen -1 und +1 am größten, bei größeren Zahlen nimmt sie stark ab. Siehe hierzu
http://de.wikipedia.org/wiki/Gleitkommazahl .
D.h. zum Beispiel für die Zahl 950,1 höchstens zwei Stellen mehr noch genau sind (wenn überhaupt).
Dies ist dem Dualsystem geschuldet, da man im Bereich der Dezimalbrüche diese ja immer nur durch eine Summe der Stammbrüche 1/2, 1/4, 1/8, 1/16 usw. darstellen kann.
In deinem Beispiel ist die angezeigte 950,1 eigentlich 950,000391. Allerdings ist die 0,900391 natürlich auch nicht exakt.
Taschenrechner sind da zum Beispiel wesentlich genauer.
Integerzahlen sind dagegen immer exakt.
Ein Trick wäre, aus 950,1 und 950 in die Ganz-Zahlen 9510 und 9500 umzuwandeln, dann exakt die Differenz berechnen und anschließend wieder durch 10 zu dividieren. Allerdings kann es dann wieder zu Ungenauigkeiten kommen; ich kann nicht abschätzen, wie genau du Werte benötigst, aber ich habe hoffentlich etwas Licht ins Ganze gebracht.
ciao herw