Excel: Gleiche Zahlen angeblich ungleich!?

Das mit dem Addieren und Subtrahieren ist einfach zu erklären. Ich habe ja schon vorher erwähnt, dass sich z.B. 0.1 nicht verlustfrei als binäre Fließkommazahl darstellen lässt. Die Zahl ist dann intern etwas größer als 0,1 nämlich 0.10000000000000000555. Wird dann an der 15ten Stelle gerundet, sieht alles ok aus. Gerechnet wird intern aber weiter mit der fehlerbehafteten Zahl.
Als Beispiel heben sich dann die Rundungsfehler bei 0,1 + 0,1 + 0,8 = 1 auf, aber bei 0,1 + 0,1 + 0,1 + 0,7 = 0.999999999999999888 schlägt er wieder zu.
 
Finde es aber wie der OP auch lächerlich. Wenn MS es wollte könnten sie es doch "korrigieren", so dass es für die allermeisten Anwender langt. Aber wo kämen wir dahin...
 
Dies kann MS nicht einfach lösen.
Das ist ein sehr bekanntes Problem in der Softwareentwicklung.
Aus dem Grund gibt es Systeme die nur mit Integer werten rechnen/Arbeiten.
Diese sind fest auf 2 Nachkommastellen eingestellt und es können auch nur Werte mit 2 Nachkommastellen im System existieren. Intern wird dann die Zahl 0,1 als 10 abgebildet und 0,15 als 15 bei der Anzeige/Ausgabe wird die zahl dann immer durch 100 gerechnet um auf den korrekten Wert zu kommen.
SAP ist z.B. ein solches System ;)

Bei Excel ist dies schwieriger weil die Anzahl der Nachkommastellen vorher nicht bekannt ist. Somit der Faktor der Umrechnung auch nicht allgemeingültig genutzt werden kann.

Wie gesagt: Bekanntest Problem und es ist eben nicht der Fehler von MS oder auch nur lächerlich :)
 
Natürlich könnte MS das lösen.

So wie es BIGINT für riesige Integer gibt, kann man genauso Reelle Zahlen anders abbilden.
 
Ja, es gibt auch BigDecimal, aber das Rechnen damit ist je nach Rechenoperation 10 bis 1000 mal langsamer.
 
Also, falls du auf die BigDecimal Variante von z.B. Java hinausmöchtest, hast du bei BigDecimal auch das Genauigkeitsproblem. Zwar kannst du die Genauigkeit wählen, aber du kannst sie nicht unendlich hoch setzen, wie es z.B. für 1/7 benötigt werden würde.
D.h. BigDecimal kann nicht einmal rationale Zahlen exakt darstellen und leidet daher unter einem ähnlichen Problem
 
Ja aber es wäre doch kein Problem für MS, einfach eine Option anzubieten, die ich aktiviere, wenn ich automatisch immer auf x Nachkommastellen gerundet arbeiten will, wie es ja z.B. bei SAP auch gemacht wird.
Dann umgeht das Programm in diesem Fall die Fließkommaproblematik einfach - natürlich auf Kosten anderer Aspekte, die aber in diesem Anwendungsgebiet weniger bedeutsam sind.
Und irgendwie hatte ich die oben genannte Option mit "Genauigkeit wie angezeigt" ein bisschen so verstanden - zumindest so, dass sie wie auch immer das Problem der Ungenauigkeiten an späten, sowieso nicht angezeigten Stellen umgeht.
 
new Account() schrieb:
Also, falls du auf die BigDecimal Variante von z.B. Java hinausmöchtest, hast du bei BigDecimal auch das Genauigkeitsproblem.
Den BigDecimal gibt es auch in C# und da er zur Basis 10 rechnet, können in der Regel Werte, die man von Hand eingegeben hat, verlustfrei repräsentiert werden. Damit ist dann wenigstens Addition und Subtraktion, wie hier vom TE erwartet, in weiten Bereichen verlustfrei möglich. Natürlich gilt auch für BigDecimal, wenn die Mantisse voll ist, dann ist die Genauigkeit am Ende.
 
Für diesen speziellen Fall des Kassenbuchs, wenn die Matrix-Formel zum Einsatz kommen soll, würde ich drüber nachdenken einfach in Cent statt in Euro zu rechnen ;).

Damit erübrigt sich die Kommastellen-Thematik. Auch wenn man es rein Darstellungstechnisch als workaround wahrnehmen kann, ist das Rechnen in der kleinsten Einheit des Berechnungsobjekts weder falsch noch anderweitig problematisch. So hättest du jedenfalls reine Integer-Zahlen und kannst nach Herzenslust addieren und subtrahieren.
 
Auch nur, falls Excel dann tatsächlich automatisch Integer nutzt. Klar werden eigentlich Geldbeträge grundsätzlich nicht als Fließkomma behandelt. Aber wenn man selbst keinen Zugriff auf die Datentypen hat, kann man wenig tun.
 
Wenn alle zu verrechnenden Zahlen ohne Kommastellen vorliegen, gäbe es, selbst wenn sie intern als Fließkommazahlen behandelt würden, auch nach der Xten Kommastelle kein Rundungsproblem, weil alle Zahlen nur Nullen als Nachkommastellen haben ;).
 
Mehr als 15stellige Euro- aber auch Centbeträge darf man bei einem Kassenbuch wohl durchaus als unrealistisch betrachten ;). Grundsätzlich hat Excel aber auch kein Problem damit Zahlen mit noch mehr Stellen richtig zu verrechnen. Lediglich mit der Darstellung und wenn man sich rein auf die Formelebene beschränkt kann es mit so großen Zahlen eben zu Problemen kommen.

Auch wenn es in Excel eben standardmäßig leider nicht vorgesehen ist mehr als 15 Stellen einer Dezimalzahl darzustellen, kann man damit genauer rechnen (zumindest mit bis zu 29 Stellen). Allerdings geht das dann eben nicht mehr ohne die bereits diskutierten workarounds wie die Umwandlung in Strings bzw. die VBA-Nutzung.
Das ist meines Erachtens aber der Ausrichtung des Programms geschuldet, denn Excel wendet sich ja nicht primär an Naturwissenschaftler, sondern ist eine Mainstream-Software die mehrheitlich für viel simplere Zwecke genutzt wird. Allein die Tatsache, dass Matrixfunktionen nutzbar sind, dürfte der überwiegenden Mehrheit der Excel-User nicht mal bekannt sein.

Mit der Möglichkeit VBA-Makros zu nutzen, lässt sich die Stellenbegrenzung jedenfalls auf 29 Stellen ausweiten. Speziell wenn bei reiner Formelschreibweise bereits Matrix-Formeln notwendig sind, ist es aber ohnehin empfehlenswert auf VBA-Makros zu setzen, da die Rechenzeiten sonst vor allem bei komplexeren Tabellen mit mehreren Matrix-Funktionen und/oder großen Arrays, sogar mit schnellen Rechnern absurd lang werden können. Excel rechnet ja immer die ganze Mappe durch. Hab jedenfalls schon Tabellen gehabt, die deshalb fast unbedienbar wurden, wenn man nicht die automatische Berechnung abgeschaltet, oder ggfls. die Iterationstiefe beschränkt hat. Große Arrays sollte man in Excel deshalb immer mittels VBA-Makros verrechnen - oder sie noch besser einfach vermeiden. Für so was gibt´s wirklich bessere Programme.

Für die Rundungsproblematik beim Kassenbuch ist das aber wie gesagt nicht wirklich relevant und wenn man in Cent rechnet fällt die Genauigkeitsbeschneidung bei den Nachkommastellen eben auch nicht mehr ins Gewicht.

Wenn man Genauigkeitsbeschränkungen bestmöglich vermeiden will, muss man halt professionellere Software verwenden und im Vorfeld vernünftige Abschätzungen treffen welche Genauigkeit überhaupt benötigt wird. Spätestens bei der Verrechnung irrationaler Zahlen (z. B. Zahlen wie Pi oder e, aber auch bei Dezimalzahlen mit periodischen Nachkommastellen) stößt man aber eigentlich immer an Grenzen. Da hilft es nur auf algebraische Methoden auszuweichen (z. B. mit Hilfe von MathCad).
 
ich muss gestehen, dass mir dieses Problem zwar noch nicht untergekommen ist ... wenn ich das so lese wundere ich mich aber, dass die Excel vergleichen funktion nicht die Möglichkeit besitzt eine genauigkeit festzulegen, was ja prinzipiell der workaround von oben war. Es ist zwar möglich zu sagen kleiner oder Größer als aber eben nicht Genauigkeit von 0,0001, weis jemand warums das nicht gibt? oder hat das bei MS einfach noch niemand gebraucht :)
 
Ihr könnt mal ein ultra einfaches Beispiel nehmen, wo dieser Fehler schon auftritt.
Gebt mal in eine Zelle folgende Formel ein:

=3055,31-3023,75=31,56

Da würde man ja schon erwarten, dass da selbstverständlich WAHR rauskommt, oder?
Schließlich kann das ja schon jeder im Kopf rechnen...
Aber es kommt trotzdem FALSCH als Antwort und da macht es auch keinen Unterschied, ob ich die Einstellung "Genauigkeit wie angezeigt festlegen" aktiviere oder nicht.
 
Macht LibreOffice es "besser" täte mich da mal interessieren.
 
Zurück
Oben