Salut all,
J'aimerai connaitre eventuellement les differences entre l'utilisation de Val() et Cint().
Les 2 font la conversion d'une donnee texte vers un format numérique, mais doit bien y avoir une difference qq part.
Merci pour vos infos.
Danyel.
Salut all,
J'aimerai connaitre eventuellement les differences entre l'utilisation de Val() et Cint().
Les 2 font la conversion d'une donnee texte vers un format numérique, mais doit bien y avoir une difference qq part.
Merci pour vos infos.
Danyel.
Bonjour.
Dixit l'aide, val sur un string donne du double.
Donc si tu codes en utilisant option strict on :
Ca ne marche pas...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3Dim i As Integer i = Val("0121.1545")
Sans option strict on ça donnera 121.
Si maintenant tu fais :
Ca plante à l'exécution.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3Dim i As Integer i = Cint("0121.1545")
Autre point, Val("0121 1545") donne 1211545 et Val("0121A1545") donne 121.
Donc à la volée, val prend les premiers caractére numérique de la chaîne (espace compris) et converti le tout en double.
Dixit l'aide :
La fonction Val arrête la lecture de la chaîne au premier caractère ne faisant apparemment pas partie d'un nombre. Les symboles et caractères fréquemment associés aux valeurs numériques, comme le signe $ et les virgules, ne sont pas reconnus. En revanche, la fonction reconnaît les préfixes &O (pour octal) et &H (pour hexadécimal). Les espaces, les tabulations et les caractères de saut de ligne ne sont pas pris en compte dans l'argument.
Niveau maîtrise de ce que ça fait c'est assez moyen.
En plus, il faudrait bencher pour voir la performance par rapport à un Cint ou CDouble.
Personnellement, comme je mets toujours option strict on, je devrai écrire :
Et là j'aimerai bien trouver à quoi sert ce val hormis à faire de l'interprétation approximative de données saisie ou une pseudo conversion hexa/octal vers decimal !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3Dim s As Double s = CDbl(Val("01211545AAAA"))
Cdt.
Merci olsimare pour ces explications plus qu'interessantes.
Pour essayer de repondre a ta question, val est/etait juste utilise pour la transformation de str -> nmb.
Je crois meme que dans un basic de la prehistoire, cette commande y etait deja.
C'est peut etre juste une ouverture vers le passe.
Perso, j'ai tjrs utilise val() puis en trainant un peu dans le msdn, je me suis donc apercu des Cxxx pour des conversions plus spécifiques.
D'ou ma question initiale.
En fait, je suis meme en train de modifier tous mes anciens Val vers des Cxxx et je m'apercois que selon les cas, ca pouvait poser des problemes.
à priori val est en effet hérité de la préhistoire
cxxx est mieux
et sinon il y a aussi ctype(object, type) qui revient au meme je pense que cxxx pour les types simples mais qui permet aussi de convertir des classes en d'autres, ou de caster sur des classes et/ou interfaces (directcast est plus rapide en cas d'héritage ou d'implémentation d'interface)
par contre des fois il faut mieux tester avant si c'est possible plutot que de traiter une erreur avec integet.tryparse() ou boolean.tryparse()
Partager