Könnten Sie mir bitte helfen? Da ich eine seltsame Situation habe, sehe ich, wenn ich eine Nummer 22222.09482 in die Zelle eingebe, eine andere Nummer 22222.0948199999 in der Bearbeitungsleiste. Unten ist der Schnappschuss des Problems.
Ich sehe das gleiche Verhalten, wenn ich die folgenden Zahlen eingebe:
22222.09482
33333.09482
44444.09482
55555.09482
aber wenn ich 11111.09482 und 66666.09482, 77777.09482 eingebe .. bis 99999.09482 dann zeigt sie richtig. Ich bin mir nicht sicher, ob dies mit der Rundung zusammenhängt. Ich habe keine Rundungsprofile eingerichtet. Könnten Sie mir bitte bei der Lösung des Problems helfen?
microsoft-excel
microsoft-excel-2016
user954171
quelle
quelle
ROUND()
?=ROUND(A1,5)
Kopieren Sie dann die Daten als Werte, und entfernen Sie die ursprünglichen Zahlen.ROUND()
zeigt das die richtigen Ziffern, aber das Kopieren / Einfügen als Wert bringt es zurück zum Original!ROUND(A1,5)
nochmal auf die eingefügten Werte. Kopieren Sie diese als Werte und fügen Sie sieRound()
erneut ein. Kopieren Sie sie anschließend. ...: P ... das ist interessant und es sieht so aus, als hätte @EugenRieck die Argumentation. Gute Frage!double
die Genauigkeit soAntworten:
Es ist ein Fehler.
Excel verwendet nach anderen Angaben die übliche IEEE-Darstellung mit doppelter Genauigkeit. Die Genauigkeit beträgt 53 signifikante Binärstellen, was ungefähr 16 Dezimalstellen entspricht.
Es ist immer "sicher", die ersten 15 signifikanten Dezimalstellen anzuzeigen . In dem Sinne, dass jede dezimal "dargestellte" Zahl mit 15 Stellen sicher von den Zahlen unterschieden werden kann, die durch Ändern der 15. Dezimalzahl durch Eins erhalten werden. Zum Beispiel die 15-stelligen Zahlen:
Abbildung auf drei verschiedene Zahlen mit doppelter Genauigkeit. In der Darstellung mit doppelter Genauigkeit wird in diesem speziellen Fall keiner dieser drei "Nachbarn" sein.
Die ersten beiden in der Benutzeranzeige zu verwechseln, ist also ein Fehler in Excel.
In dieser Domäne (zwischen 16384 und 32768) beträgt die absolute Genauigkeit 2 bis 38 , und die folgenden Zahlen sind darstellbar:
Versuchen Sie zur weiteren Erläuterung,
22222.09482
in eine Zelle und22222.0948199999
in eine andere Zelle (fünf nachgestellte Neunen) einzugeben. Excel sollte die beiden IEEE-Vertreter auswählen, die durch den obigen Pfeil gekennzeichnet sind. Und ich denke schon, weil man die Differenz dieser beiden Zellen berechnen kann, um zu bekommen9.82254E-11
. Aber beide werden auf die gleiche Weise gezeigt.Wenn Excel die ersten 17 Stellenangezeigthätte, wäre es hilfreich, genau herauszufinden, welche IEEE-Nummer "unter" der Dezimalzahl liegt. In diesem Fall:
Es ist jedoch irreführend und wenig hilfreich, wenn 15 Stellen falsch gerundet angezeigt werden.
Bevor jemand behauptet, es sei beabsichtigt, warum zeigt er dann
8.7
nicht dasselbe Verhalten? Die nächstgelegene Zahl mit doppelter Genauigkeit8.7
ist:so sollte es sich zeigen, als
8.69999999999999
ob dies beabsichtigt war. Aber das tut es nicht.quelle
2.1 + 2.2
zurück4.80000001
?" und ich bekomme viele Antworten, die besagen, dass ich das erwarten muss, wenn ich Fließkommazahlen verwende.Excel speichert Zahlen im binären 64-Bit-Gleitkommaformat nach IEEE 754 . Der Schlüssel ist "speichert" - der Wechsel von Dezimal zu Binär erfolgt immer dann, wenn eine Zahl gespeichert wird, nicht nur, wenn sie in einer tatsächlichen Berechnung verwendet wird.
Ein netter Artikel dazu ist unter Grundlegendes zur Gleitkommapräzision, auch bekannt als "Warum gibt Excel mir scheinbar falsche Antworten?"
Es ist möglich, ein Tabellenkalkulationsprogramm zu erstellen, das sehr große Zahlen mit vielen signifikanten Ziffern verarbeiten kann. Aber es ist nicht besonders praktisch. Excel hätte das IEEE 754-Dezimalformat 128 verwenden können , das 34 Dezimalstellen zulässt - mehr als genug, um 22222.09482 zu speichern. Stattdessen wird das weitaus gebräuchlichere binary64 Double Precision- Format verwendet, das eine Genauigkeit von 53 Bit aufweist, was knapp 16 Stellen entspricht. Während Sie vielleicht denken, dass dies für eine Zahl mit nur 10 Stellen ausreichen würde, erschwert die Konvertierung von dezimal zu binär die Dinge ein wenig - dh 2222209482 kann zu 100% korrekt als binäre 64-Zahl gespeichert werden, 22222.09482 jedoch nicht.
Beachten Sie, dass in der Regel Tabellenkalkulationen für Finanzdaten verwendet werden, für die in der Regel nicht so viele Ziffern erforderlich sind, oder für die "Was-wäre-wenn" -Modellierung in einer Vielzahl von Szenarien, in denen keine besonders hohe Genauigkeit erforderlich ist. Es gibt sicherlich andere Tools (und wahrscheinlich auch andere Tabellenkalkulationsprogramme, die ich in letzter Zeit nicht gesucht habe), die entweder standardmäßig oder durch spezielle Konfigurationseinstellungen ein größeres numerisches Format verwenden können, aber Excel ist keines davon.
Für diejenigen, die darauf hinweisen, dass LibreOffice dies besser handhabt, kann das Aussehen täuschen. Weitere Details finden Sie in diesem Beitrag . Es scheint, dass LibreOffice große Zahlen leicht unterschiedlich behandelt, aber dieselbe grundlegende 64-Bit-Gleitkommadarstellung mit ähnlichen Problemen aufweist.
quelle
22222.09482
Wird wie1.0101101100111000011000010001100001111110011111000000₂ * 2₁₀^(10000001101₂ - 1023₁₀)
in IEEE 754 gespeichert , oder mit anderen Worten so genau1.35632902954101553 * 2^14
, wie es ist22222.0948199999984353787904
.0.2
und0.1
nicht genau dargestellt werden (der Bruch 1/5 (ein Fünftel) hat eine unendlich wiederkehrende binäre Erweiterung). Excel zeigt die Dinge jedoch auf verwirrende Weise.Money
oder einBigInteger
Format, das häufig das Dezimalspeicherformat verwendet.Bei der Berechnung muss Excel eine gute interne Binärdarstellung für die verwendeten Zahlen finden. In Ihrem Fall wird eine Gleitkommazahl verwendet, und tatsächlich hat dieses Datenformat eine (sehr gute) Näherung für Ihre Zahl, aber keine exakte Übereinstimmung. Wenn Sie Excel also nicht explizit mitteilen, welches Ausgabeformat verwendet werden soll, wird "bestmögliche Leistung" erbracht, was zu einer Ausgabe führt, die näher am intern berechneten Wert liegt, aber nicht genau dem eingegebenen Text entspricht.
Um dies zu verdeutlichen: Wenn Sie verstehen, dass der von Ihnen eingegebene Text eine Zahl darstellt und die Ziffernfolge in eine Zahl umwandelt, entspricht dies bereits der Definition von "Berechnung" von oben.
BEARBEITEN
Ich habe nicht deutlich genug gemacht, dass ich die Wahl einer 64-Bit-Gleitkommadarstellung eigentlich für gut halte: Excel ist kein Werkzeug für Wissenschaftler, bei dem ein Rundungsfehler in der 11. Stelle nach dem Komma entsteht Eine große Auswirkung, aber Buchhalter möchten nicht, dass ihre Verarbeitungsgeschwindigkeit um einen Faktor von Millionen verringert wird, um eine Quelle ungenauer Berechnungen zu berücksichtigen, die sich in Zahlen manifestieren können, die sie niemals verwenden.
Wenn Sie ein Tabellenkalkulationsprogramm für das verwenden, wofür es entwickelt wurde, und eine explizite Ausgabeformatierung verwenden, um sicherzustellen, dass diese Effekte niemals in den sichtbaren Bereich gelangen, ist alles in Ordnung.
quelle
Einige Zahlen können korrekt dargestellt werden, andere nicht.
Stellen Sie die angezeigte Genauigkeit entsprechend Ihren Berechnungen ein und verwenden Sie die Funktion round () .
Erläuterung:
Wikipedia - " Numerische Genauigkeit in Microsoft Excel "
Orakels Handbuch zur numerischen Berechnung - " Was jeder Informatiker über Gleitkomma-Arithmetik wissen sollte "
Lösung:
Journal of Accountancy - " Fehler bei der Berechnung von Excel ":
quelle
Wie Sie sicher wissen, arbeiten Computer intern nur mit Nullen und Einsen (alias Bits) und haben eine feste Anzahl von Bits, um einen Wert darzustellen (heutzutage normalerweise 64 Bits). Dies bedeutet, dass die Anzahl der verschiedenen darstellbaren Werte zwischen 2 und 64 liegt. Das ist zwar eine riesige Zahl, aber die Anzahl der möglichen Werte ist endlich, sodass nicht alle Zahlen dargestellt werden können. Wenn es auf eine Zahl stößt, die es nicht genau darstellen kann, wird sie automatisch durch die nächste ersetzt, die es darstellen kann . Das ist was du siehst.
quelle
Computer rechnen binär und verwenden fast immer Gleitkommazahlen für nicht ganzzahlige Werte. Die einzigen Bruchwerte, die genau im Gleitkomma dargestellt werden können, müssen eine Summe aus einer Kombination von Bruchkräften von 2 (1/2, 1/4, 1/8, 1/16, 1/32, ...) sein, die enden an der festgelegten Genauigkeitsgrenze (normalerweise 53 Bit). Diese Werte haben nicht immer eine ordentliche oder exakte Darstellung in Dezimalzahl, und umgekehrt haben nicht alle Bruchzahlen, die Sie genau in Dezimalzahl darstellen können, eine exakte Darstellung in Binärzahl. Zum Beispiel: 0.1. Es kann nicht als eine Summe von Bruchkräften von 2 dargestellt werden, die nicht für immer andauert.
Wenn Sie einen Dezimalwert in Ihre Tabelle eingeben, wird dieser konvertiert und binär gespeichert. Fälle, wie Sie sie beschrieben haben, werden zur genauesten Näherung, die binär dargestellt werden kann. Bei der Anzeige wird es wieder in eine Dezimalzahl konvertiert, was wiederum eine Annäherung erfordert, die möglicherweise nicht in genau die von Ihnen eingegebene Darstellung zurückkonvertiert wird.
Warum 53 Bits (Geben oder Nehmen)? Weil der typische Standard zum Speichern von Gleitkommazahlen mit "doppelter Genauigkeit" 64 Bit verwendet, in denen eine Mantisse (auch Signifikant genannt), ein Vorzeichenindikator und ein Exponent vorhanden sind. Dem Exponenten werden normalerweise 10 Bits zugewiesen, das Vorzeichen nimmt eins und die Mantisse 53. Dies ist zur Aufbewahrung. Berechnungen werden in der Regel mit 80 Bit durchgeführt und zurückgerundet.
Es gibt Situationen, in denen Computer in der Basis 10 funktionieren, insbesondere wenn mit Geldwerten gearbeitet wird, bei denen Rundungsartefakte nicht akzeptabel sind.
quelle
Wie viele oben gesagt haben, ist dies ein interner Darstellungsfehler. Excel hat sich für 64-Bit-Gleitkommazahlen mit doppelter Genauigkeit entschieden. Dies gibt Ihnen 2 64 mögliche Werte. Die Domäne für reelle Zahlen enthält unendlich viele Werte. Wenn Sie also versuchen, einen Wert zu verwenden, der von Excel nicht dargestellt werden kann, wird der Wert verwendet, der am ehesten dargestellt werden kann.
Ich habe Kommentare gesehen, die besagten, dass bei unendlichem Speicher jede reelle Zahl dargestellt werden kann. Es stimmt, aber es gibt kein "unendliches Gedächtnis", daher ist dies ein strittiger Punkt. Andere haben angegeben, dass Excel eine größere interne Darstellung hätte verwenden können, beispielsweise 128 Bit. Es stimmt, aber es stellt sich heraus, dass Computer besser in der Lage sind, mathematische Operationen an Zahlen durchzuführen, die mit der Anzahl der Bits dargestellt werden, die der Busgröße des Prozessors entsprechen. So ist ein 32-Bit-Computer bei mathematischen Operationen mit 32-Bit-Zahlen am schnellsten und ein 64-Bit-Computer bei mathematischen Operationen mit 64-Bit-Zahlen am schnellsten. Wenn und wann es einen 128-Bit-Computer geben wird, können wir davon ausgehen, dass Excel zur 128-Bit-Zahlendarstellung übergeht. Das wird immer noch eine sehr große, aber begrenzte Menge von Zahlen liefern, die dargestellt werden können.
Wenn Sie sich Gedanken darüber machen, wie die Zahlen in der Tabelle aussehen, erhalten Sie konsistente Ergebnisse, wenn Sie eine festgelegte Genauigkeit (Anzahl der Dezimalstellen) verwenden. Wenn es Ihnen um den Unterschied zwischen der von Ihnen eingegebenen und der von Excel tatsächlich gespeicherten Nummer geht, sind Sie zu Recht besorgt. Der Unterschied ist real und der Fehler wird durch alle von Ihnen vorgenommenen Berechnungen übertragen. Ich fürchte, Sie stecken mit diesem Fehler fest. Dies ist eine Einschränkung von Excel, kein Fehler, wie einige angegeben haben. Es ist unwahrscheinlich, dass sich dies bald ändert. Wenn dies für Sie nicht akzeptabel ist, sollten Sie nach einer anderen Tabellenkalkulationsanwendung suchen, die Zahlen mit höherer Genauigkeit darstellen kann. Denken Sie jedoch daran, dass die Einschränkung auch dann besteht, wenn Sie eine solche Anwendung finden. Es ist nur die Größe des Fehlers, die anders ist.
quelle