vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Variablen/Strings · Sonstiges   |   VB-Versionen: VB4, VB5, VB612.12.02
Fehlerhafte Val()-Funktion

Dieser Tipp zeigt wie sich die fehlerhafte Val-Funktion beim Umwandeln von Zahlen in Exponential-Darstellung umgehen lässt.

Autor:   Dietmar G. BayerBewertung:  Views:  14.340 
ohne HomepageSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11kein Beispielprojekt 

Der Fehler bei der Val-Funktion sollte eigentlich schon bekannt sein:

Val("2%")    ' ergibt 2
Val("2.0%")  ' ergibt 2
Val("2.1%")  ' erzeugt einen "type mismatch" Fehler.

Abhilfe:
Per Replace-Funktion das Prozentzeichen in z.B. "$" wandeln.

Val(Replace("2.1%", "%", "$"))  ' ergibt 2.1

Schwerwiegender, und schlechter zu finden ist dagegen ein Zahleneffekt.
Visual Basic kennt 2 Zahlendarstellungen:

  1. die Normale wie 0.0000004
  2. die Exponential-Darstellung als 4.03E-8

Hier ist zu beachten, dass beim Einsetzten einer Exponential-Darstellung als Text, Caption, in ListBox und Listview der Wert mit einem Komma geschrieben wird. Außerdem liefert Val() falsche Werte zurück weil Val() die Mantisse falsch auswertet:

Val("4,03E-8")=4   ' Komma-Effekt
Val("4.03E-8")     ' ergibt 0.0000000403 (Falsch)

Aber:

CDbl("4.03E-8")  ' ergibt 0,00000403 (Richtig)
CSng("4.03E-8")  ' ergibt 4,03E-06 = 0,00000403 (Richtig)

Fazit:
Bei der Wandlung mittels Val wird falsch gerechnet!
 



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle 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.