Am 06.04.2010 22:35, schrieb Andreas Griesche:
Hallo zusammen,
ich möchte eine Datenreihe aufbauen und anschliessend im .csv Format
abspeichern. Dabei ist mir folgendes aufgefallen:
Die Reihe beginnt mit 84,015 und in jeder neuen Zeile werden 0,02 hinzuaddiert.
Danach kopiere ich die Werte der Zellen eine Spalte nach rechts. Das
funktioniert richtig bis zur 14. Zahl. Danach der Wert in der Zelle richtig
angezeigt aber in der Eingabezeile steht eine andere Zahl (Zelle=84,295 /
Eingabezeile=84,29499999999).
Siehe angehängtes Calc Blatt.
Habe ich irgendwo einen Einstellungsfehler oder verrechnet sich Calc an dieser
Stelle?
Vor einiger Zeit hatte schon mal jemand dieses Problem und daraus stammt
die folgende Erklärung:
Du bist auf ein grundsätzliches Problem mit Rechnen auf dem Computer
gestoßen. Computer
benutzen intern nicht das Zehnersystem sondern das Zweiersystem. Und so
wie im Zehnersystem
beispielsweise 1/3 nicht mit einer endlich Dezimalzahl dargestellt
werden kann, so kann im
Zweiersystem 1/10 und 1/100 nicht mit einer endlichen Zahl dargestellt
werden. Da ein Computer
aber nur endlich Platz hat, muss die Zahl irgendwo abgeschnitten werden
und das gibt dann
beim Rückwandeln in das Zehnersystem Ungenauigkeiten.
Dieses Problem tritt generell auf, nicht nur bei OOo. Im allgemeinen ist
OOo auf
mindestens 12 Ziffern genau, was für die Grundrechenarten auch
problemlos eingehalten wird.
Du solltest es nur vermeiden Zahlen voneinander zu subtrahieren, die
sich erst in den letzten Dezimalstellen
voneinander unterscheiden.
Was kannst du tun? Da gibt es verschiedene Varianten, je nach Anforderung.
(1) Vermeide Dezimalzahlen. Bei Geldbeträgen heißt das, dass du in Cent
rechnest. Bei
ganzen Zahlen gibt es keine Umwandlungsungenauigkeiten.
(2) Runde nach jeder Rechenoperation wieder auf zwei Stellen nach dem
Komma.
Dabei musst du von den diversen angebotenen Rundungsmechanismen das
kaufmännische Runden benutzen.
(3) Stelle OOo so um, dass es, wenn es zum Weiterrechnen einen Wert aus
einer Zelle
holt, nicht den internen Wert nimmt, sondern den Wert benutzt, wie er in
der Zelle
angezeigt wird.
(4) Ignoriere, dass deine Zahl irgendwo ab der 12. Dezimalstelle nicht
so aussieht wie
von Hand gerechnet, du brauchst wahrscheinlich eh nur 2-3 bis
Dezimalstellen.
--
Mit freundlichem Gruß
Rainer Schock