IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Differences de Conversion


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de Danyel
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    1 699
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 699
    Par défaut Differences de Conversion
    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.

  2. #2
    Membre Expert
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 182
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 182
    Par défaut
    Bonjour.

    Dixit l'aide, val sur un string donne du double.

    Donc si tu codes en utilisant option strict on :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
           Dim i As Integer
           i = Val("0121.1545")
    Ca ne marche pas...

    Sans option strict on ça donnera 121.

    Si maintenant tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
           Dim i As Integer
           i = Cint("0121.1545")
    Ca plante à l'exécution.

    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            Dim s As Double
            s = CDbl(Val("01211545AAAA"))
    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 !

    Cdt.

  3. #3
    Membre Expert Avatar de Danyel
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    1 699
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 699
    Par défaut
    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.

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    à 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()
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Vxi3] resultat different apres conversion
    Par Charentais dans le forum Webi
    Réponses: 2
    Dernier message: 04/07/2012, 14h53
  2. Différences entre Delphi et Visual Basic ?
    Par Anonymous dans le forum Débats sur le développement - Le Best Of
    Réponses: 75
    Dernier message: 30/03/2009, 20h09
  3. affectations de types differents conversion ?
    Par alibas dans le forum C++
    Réponses: 1
    Dernier message: 26/09/2006, 08h28
  4. [Conversions] Millisecondes...
    Par agh dans le forum Langage
    Réponses: 2
    Dernier message: 06/08/2002, 11h25
  5. Réponses: 2
    Dernier message: 05/06/2002, 12h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo