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 6 et antérieur Discussion :

Problème d'affectation de type Long


Sujet :

VB 6 et antérieur

  1. #1
    Membre régulier
    Étudiant
    Inscrit en
    Août 2008
    Messages
    349
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2008
    Messages : 349
    Points : 93
    Points
    93
    Par défaut Problème d'affectation de type Long
    Bonjour tout le monde,

    J'ai le bout de code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Dim lnTest As Long
    Dim dbTest As Double
    dbTest = 2.5
    lnTest = dbTest
    à chaque exécution le "lnTest" reçoit un résultat différent parfois "3" et parfoit "2" !!!
    J'arrive pas à comprendre comment l'affectation à un long se fait dans le cas ou c'est "x.5", est ce que ça se fait par minoration ou par majoration !!!!
    Quelqu'un peut m'aider s'il vous plait ?
    Merci d'avance.

  2. #2
    Membre éclairé
    Inscrit en
    Décembre 2007
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 512
    Points : 671
    Points
    671
    Par défaut
    Bonsoir,
    Pour être certain du résultat,emploie:

    Int, fonction, Fix, fonction, exemple
    Cet exemple montre comment les fonctions Int et Fix renvoient les parties entières de nombres. Dans le cas d'un argument spécifiant un nombre négatif, la fonction Int renvoie le premier entier négatif inférieur ou égal au nombre, tandis que la fonction Fix renvoie le premier entier négatif supérieur ou égal au nombre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Dim MyNumber
    MyNumber = Int(99.8)   ' Renvoie 99.
    MyNumber = Fix(99.2)   ' Renvoie 99.
     
    MyNumber = Int(-99.8)   ' Renvoie -100.
    MyNumber = Fix(-99.8)   ' Renvoie -99.
     
    MyNumber = Int(-99.2)   ' Renvoie -100.
    MyNumber = Fix(-99.2)   ' Renvoie -99.

  3. #3
    Membre actif
    Inscrit en
    Janvier 2011
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 112
    Points : 209
    Points
    209
    Par défaut
    _ Iorana.
    _ Quelques observations à partir de diverses variantes de votre test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Dim lnTest As Integer
    Dim dbTest As Double
     
    ' 1er test
    dbTest = 2.5
    lnTest = dbTest
    MsgBox Format$(lnTest)
    '---------------------
    ' 2ème test
    dbTest = 2.50000000000001
    lnTest = dbTest
    MsgBox Format$(lnTest)
    '---------------------
    ' 3ème test avec
    ' dbTest entré à 2.500000000000001
    dbTest = 2.5
    lnTest = dbTest
    MsgBox Format$(lnTest)
    '---------------------
    ' 4ème test avec copié-collé du 1er
    dbTest = 2.5
    lnTest = dbTest
    MsgBox Format$(lnTest)
    '---------------------
    ' 5ème test avec copié-collé du 3ème
    dbTest = 2.5
    lnTest = dbTest
    MsgBox Format$(lnTest)
    1) Le premier test (2.5) m'a donné 2 comme résultat, à chaque lancement du programme ;
    2) le deuxième (2.50000000000001) donne 3 (ce qui paraît assez logique) ;
    3) pour le troisième, j'ai repris 2.50000000000001 en ajoutant un 0 entre le 5 et le 1 ; dans ce cas
    ___a- VB remplace lui-même (dans le code) 2.500000000000001 par 2.5 ;
    ___b- le résultat est 3 ;
    4) pour les deux derniers, le résultat est 2.

    _ Il semble donc que, dans le cas n°3, VB « se souvienne » que l'on a affaire à un 2,5 plus grand que le 2,5 de base, peut-être parce que les deux 2.5 sont la visualisation de deux encodages internes différents.

    _ Bon courage pour la suite des investigations.

Discussions similaires

  1. Problème avec le type "LONG" sous Oracle 10g
    Par th.garcia dans le forum Oracle
    Réponses: 3
    Dernier message: 19/06/2009, 12h57
  2. problème avec le type long long
    Par fred_sell dans le forum Débuter
    Réponses: 10
    Dernier message: 15/06/2009, 12h48
  3. Réponses: 2
    Dernier message: 31/10/2007, 15h40
  4. Problème tlbexp.exe - VB6/VB.NET 2005 type long
    Par Tetram165 dans le forum C++/CLI
    Réponses: 1
    Dernier message: 17/09/2007, 12h17
  5. Problème d'export du type LONG
    Par hyipicai dans le forum Oracle
    Réponses: 1
    Dernier message: 29/06/2007, 14h12

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