Hallo Labtron,
Zitat:Jedoch stelle ich mir die Frage, wo die 1 herkommt, die ich ja nicht eingegeben habe.
Ganz einfach:
FloatingPoint-Zahlen haben eine begrenzte Genauigkeit UND eine begrenzte Auflösung!
DBL-Zahlen haben 53bit Mantisse: die Auflösung ergibt sich damit zu 2^(exponent-53). (Vielleicht liege ich 1bit daneben mit der Formel, aber die Prinziprechnung bleibt.)
Und da Floats üblicherweise als Binärwerte kodiert werden, kommt noch hinzu, dass alle Brüche mit 10er Potenzen im Binärsystem unendliche Brüche sind! Damit können solche Werte, die im Dezimalsystem "glatte" Nachkommastellen haben, nicht exakt im Binärsystem dargestellt werden. Und deine 0.0002 sind eben 2*10^-4…
Runden der Floatzahl auf 5 Nachkommastellen ergibt so auch keinen Sinn: sobald du irgendwie wieder auf den Zahlenwert 0.0002 zurückrechnest (entweder durch Umwandeln eines Strings "0.0002" in eine Float-Zahl oder durch dividieren von 2 durch 10^4) bekommst du wieder einen Floatwert, der eben
möglichst genau den Wert 0.0002 repräsentiert - aber eben nicht
exakt!
Diese Rundungsproblematik findest du in vielen Threads hier im LabVIEW-Forum, im NI-Forum und in diversen anderen (Programmier-)Foren! Lies dir bitte die
Grundlagen zu Floatzahlen durch…
Daraus ergeben sich Grundregeln im Umgang mit Floats:
- NIE auf Gleichheit prüfen (zumindest bei Rechenwerten)!
- Dran denken, dass es für den (gültigen!) Wert NaN ebenfalls klar definierte Rechenregeln gibt…