vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevAniGif - als kostenlose Vollversion auf unserer vb@rchiv CD Vol.5  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Allgemeine Diskussionen
VB 6.0 - Rechenfehler mit Variant, Single und Double-Typen 
Autor: Marten
Datum: 27.10.17 01:24

Hallo zusammen!

Tja, der Zahn der Zeit nagt an mir, und so wollte ich "mal eben" einen Taschenrechner mit Ultra-fettem Display bauen, das auch ich ablesen kann.
Beim Testen (durch Programm und auch Debugger) stieß ich auf folgendes "Wunder":

? 7.2 - 7
0,2
? 8.2 - 8
0,199999999 ....

Habe es mit Variant, Single und DoubleTypen probiert - jeweils das gleiche Ergebnis.

Kennt jemand eine Lösung oder ein Workaround?

Vielen Dank fürs Lesen

Marten
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: VB 6.0 - Rechenfehler mit Variant, Single und Double-Typen 
Autor: Zardoz
Datum: 27.10.17 13:40

Hallo Marten,
das sind Rechenungenauigkeiten, die bei der
Umrechnung zwischen binär und dezimal entstehen.
Du kannst den Variablentyp Decimal verwenden,
oder Runden:
  ? CDec(8.2)-8
  ? Round(8.2-8,10)

Gruss,

Zardoz

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: VB 6.0 - Rechenfehler mit Variant, Single und Double-Typen 
Autor: Manfred X
Datum: 27.10.17 13:50

Hallo!

Die VB6-Gleitkomma-Datentypen Single und Double (IEEE) arbeiten
mit begrenzter Genauigkeit - auch bei der internen Darstellung.
Rechenergebnisse stimmen deshalb häufig nicht exakt mit dem
erwarteten Resultat überein.
Je (absolut) größer der Zahlen-Wert, desto geringer die Genauigkeit.

Du hast die Möglichkeit, abhängig von der Ausprägung des Ergebnisses
geeignet zu runden. Double-Werte bieten etwa 14 verwertbare Stellen,
d.h. bei einem Wert von 100000 wäre auf etwa 8 Nachkomma-Stellen zu
runden.
Dim dbl1 As Double, dbl2 As Double, erg As Double
Dim erg_str As String
 
dbl1 = 8.2: dbl2 = 8
erg = dbl1 - dbl2
 
erg_str = Format(erg, "0.#############")
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: VB 6.0 - Rechenfehler mit Variant, Single und Double-Typen 
Autor: Manfred X
Datum: 27.10.17 13:54

Hallo!

Der Variant-Untertyp "Decimal" weist in VB6 einige
Eigentümlichkeiten auf.
http://www.vbarchiv.net/tipps/details.php?id=1247
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: VB 6.0 - Rechenfehler ... Danke für die Hilfe 
Autor: Marten
Datum: 29.10.17 03:45

Hallo Zardoz und Manfred X!

Besten Dank für Eure Tips!

Habe letztendlich:

Result = Cdec(Firstnum) - Cdec(Secondnum)

erfolgreich eingesetzt.
Zusätzlich vielen Dank für die interessanten Hintergründe zu diesen Rechenfehlern!

Wünsche eine schöne (Herbstferien-)Woche

Marten
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel