Vergleichen Sie das doppelte VBA-Genauigkeitsproblem

8

Ich habe Probleme beim Vergleich von 2 Doppel in Excel VBA

Angenommen, ich habe den folgenden Code

%Vor%

Nach einigen Manipulationen an b ist b jetzt gleich 0,6

aber die Ungenauigkeit in Bezug auf den doppelten Datentyp gibt mir Kopfschmerzen, weil

%Vor%

Weißt du, wie ich die nachlaufende Ungenauigkeit am Doppeltyp entfernen kann?

    
Eric 24.10.2008, 22:05
quelle

6 Antworten

13

Sie können Fließkommawerte für Gleichheit nicht vergleichen. Siehe diesen Artikel auf " Vergleichen von Gleitkommazahlen " für eine Diskussion darüber, wie der intrinsische Fehler behandelt wird.

Es ist nicht so einfach, wie mit einer konstanten Fehlerspanne zu vergleichen, wenn Sie nicht genau wissen, wie hoch der absolute Bereich der Floats vorher ist.

    
Rob Walker 24.10.2008, 22:12
quelle
3

Es ist nie klug, Doppelgänger auf Gleichheit zu vergleichen.

Einige Dezimalwerte werden mehreren Gleitkommadarstellungen zugeordnet. Also ist 0.6 nicht immer gleich 0.6.

Wenn wir eins voneinander subtrahieren, erhalten wir wahrscheinlich etwas wie 0,00000000051.

Wir können nun definieren, dass Gleichheit einen Unterschied kleiner als eine bestimmte Fehlergrenze hat.

    
Toon Krijthe 24.10.2008 22:09
quelle
3

wenn Sie das tun werden ....

%Vor%

Sie müssen die runde Funktion in Ihrer IF-Anweisung wie folgt hinzufügen ...

%Vor%

Siehe auch hier für zusätzliche Microsoft-Referenz .

    
Anonymous Type 07.04.2011 06:14
quelle
2

Wie bereits erwähnt, können viele Dezimalzahlen nicht genau als traditionelle Gleitkommatypen dargestellt werden. Abhängig von der Art Ihres Problembereichs ist es besser, den Dezimal-VBA-Typ zu verwenden, der Dezimalzahlen (Basis 10) mit perfekter Genauigkeit bis zu einem bestimmten Dezimalpunkt darstellen kann. Dies wird oft zum Beispiel für die Darstellung von Geld gemacht, wo oft 2-stellige Dezimalgenauigkeit gewünscht wird.

%Vor%     
C. Dragon 76 24.10.2008 23:18
quelle
2

Hier ist eine einfache Funktion, die ich schrieb:

%Vor%

Rufen Sie es mit:

auf %Vor%     
user3706920 04.06.2014 15:14
quelle
1

Der Datentyp "Währung" kann eine gute Alternative sein. Es verarbeitet relativ große Zahlen mit einer festen vierstelligen Genauigkeit.

    
DJ. 27.10.2008 21:36
quelle

Tags und Links