J'ai eu une erreur étrange dans une application VB6 ce matin et tout provient du fait que Numérique ne fonctionne pas comme prévu. Quelqu'un peut-il perdre une lumière sur pourquoi? À moi cela semble être un bug.
Ce code affiche Je suppose que le Le moteur d'exécution pense à tort que le D est en fait un e?
Je pense que ceci est un bug que comme le même code dans les sorties VB.net 4.15877e + 62 code> dans un boîtier de message: p>
pas numérique code>
Est-ce un problème connu avec isnumeric? P> p>
3 Réponses :
Si vous vérifiez les documents VB6: P>
Note forte> Les valeurs à virgule flottante peuvent être exprimées comme mmmeeee ou MMMDEEE, dans laquelle MMM est la MANTUSSA et EEE est l'exposant (une puissance de 10). La valeur positive la plus élevée d'un type de données unique est de 3,402823e + 38, ou 3,4 fois 10 à la 38ème puissance; La valeur positive la plus élevée d'un double type de données est de 1,79769313486232D + 308, ou environ 1,8 fois 10 à la 308ème puissance. L'utilisation de D pour séparer la mantissie et l'exposant dans un littéral numérique provoque le traitement de la valeur comme un double type de données. De même, l'utilisation de E de la même manière traite la valeur en tant que type de données unique. P> blockQuote>
Oh ok alors - je suppose que cela a été changé / abandonné dans vb.net alors?
On dirait qu'une seule perte de fidélité, oui.
Je suggère de faire un validateur personnalisé. Voulez-vous autoriser 0-9 seulement? Qu'en est-il des négatifs? Des virgules? Je n'ai jamais pris soin de la mise en œuvre de Microsoft, mais je le comprends. P>
J'utilise ma propre fonction ISnumber pendant une longue période exactement à cause de cette situation. Isnumeric peut également revenir pour certains symboles de l'argent, comme celui-ci: isnumeric ("34,20 $").
Ma fonction ISnumber ressemble à ceci: p>
Public Function IsNumber(ByVal Data As String) As Boolean If Data = "" Then IsNumber = False Exit Function End If IsNumber = IsNumeric(Data & "e0") End Function
Isnumeric (null & "e0") reviendra de faux alors pourquoi vérifier la chaîne vide?
Tu as raison. Toutefois, si vous modifiez ce code pour vérifier les numéros entiers avec ISnumeric ("" & ".0e0"), il retournera true.
Isnumeric ("34,20 $") ne fonctionne pas avec les paramètres régionaux anglais.