IsNumeric gibt true für Strings zurück, die ein D-Zeichen enthalten

8

Ich hatte heute Morgen einen merkwürdigen Fehler in einer VB6-App, und das alles rührt von der Tatsache her, dass IsNumeric nicht so funktioniert, wie ich es erwartet hatte. Kann jemand etwas erklären warum? Für mich scheint das ein Fehler zu sein.

Dieser Code zeigt 4.15877E+62 in einem Meldungsfeld an:

%Vor%

Ich vermute, dass die Laufzeit-Engine fälschlicherweise denkt, dass das D tatsächlich ein E ist? Ich denke, das ist ein Fehler obwohl der exakt gleiche Code in VB.NET Ausgaben not numeric Ist das ein bekanntes Problem mit IsNumeric?

    
Matt Wilko 25.11.2011, 09:28
quelle

3 Antworten

14

Wenn Sie die VB6-Dokumente überprüfen:

  

Hinweis Gleitkommawerte können als mmmEeee oder mmmDeee ausgedrückt werden, wobei mmm die Mantisse und eee der Exponent (eine Potenz von 10) ist. Der höchste positive Wert eines Datentyps Single ist 3,402823E + 38 oder 3,4 Mal 10 bis 38. Potenz; Der höchste positive Wert eines Double-Datentyps ist 1.79769313486232D + 308 oder etwa 1,8 mal 10 zur 308ten Potenz. Wenn Sie D verwenden, um die Mantisse und den Exponenten in einem numerischen Literal zu trennen, wird der Wert als Double-Datentyp behandelt. Gleichermaßen behandelt die Verwendung von E auf dieselbe Weise den Wert als einen einzelnen Datentyp.

    
Bob77 25.11.2011, 09:49
quelle
11

Ich habe meine eigene IsNumber-Funktion schon lange wegen dieser Situation benutzt. IsNumeric kann auch für bestimmte Geldsymbole wie folgt zurückgegeben werden: IsNumeric ("$ 34.20").

Meine IsNumber-Funktion sieht so aus:

%Vor%

Die Idee hier ist ... wenn es bereits ein e oder d in den Daten gibt, wird das Hinzufügen eines anderen dazu führen, dass die Daten NICHT numerisch sind, indem die IsNumeric-Prüfung verwendet wird. Sie können diese Funktion einfach so ändern, dass nur Ganzzahlen zulässig sind, indem Sie "e0" durch ".0e0" ersetzen. Willst du nur positive ganze Zahlen? dann benutze das: IsNumeric ("-" & amp; Data & amp; ".0e0")

Der einzige Nachteil dieser Methode ist, dass ein leerer String normalerweise nicht numerisch ist, aber wenn Sie "e0" an ihn anhängen, wird er numerisch, also müssen Sie einen Haken hinzufügen, wie ich es in meinem Code getan habe / p>     

G Mastros 28.11.2011 18:35
quelle
1

Ich schlage vor, einen benutzerdefinierten Validator zu erstellen. Möchten Sie nur 0-9 zulassen? Was ist mit Negativen? Kommas? Ich habe mich nie um die Implementierung von Microsoft gekümmert, aber ich verstehe es.

    
UnhandledExcepSean 25.11.2011 14:02
quelle

Tags und Links