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

VBScript Discussion :

[VBS]probleme ds comparaison de nombres


Sujet :

VBScript

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 332
    Points : 104
    Points
    104
    Par défaut [VBS]probleme ds comparaison de nombres
    Voici ma fonction pour classer ds des groupes des gens en fonction de la comparaison de leur moyenne avec celle des autres

    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
     
    if consol(4)<(Left(famille5,4)- Left(SQR(ecart_type5),4)) then
                  niveau(5,1)=niveau(5,1)+1
                  elseif (Left(famille5,4)- Left(SQR(ecart_type5),4))<consol(4<Left(famille5,4) then
                  niveau(5,2)=niveau(5,2)+1
                  elseif Left(famille5,4)<consol(4)<(Left(famille5,4)+(1* Left(SQR(ecart_type5),4))) then
                  niveau(5,3)=niveau(5,3)+1
                  elseif (Left(famille5,4)+(1* Left(SQR(ecart_type5),4)))<consol(4)<(Left(famille5,4)+(2*Left(SQR(ecart_type5),4)))then
                  niveau(5,4)=niveau(5,4)+1
    end if
     
    avec:
    consol(4)=55
    famille5=48.3
    famille5-SQR(ecart_type5)=35.8
    famille5+SQR(ecart_type5)=60.8
    je devrais avoir niveau(5,3)=1 pourtant j'ai toujours niveau(5,2)=1
    ou est mon erreur?

    merci bcp

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 35
    Points : 33
    Points
    33
    Par défaut
    à vérifier (je suis un newbie) mais je pense que tu ne peux pas faire 2 tests en un seul if sans un and... Ce que tu fais 3 derniers tests. Pour tester si un nombre est compris entre deux valeurs, il faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if a<b and b<c then...
    'si b est supérieur à a ET inférieur à c, alors...

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 332
    Points : 104
    Points
    104
    Par défaut
    j'ai essayer et cela ne change rien

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 332
    Points : 104
    Points
    104
    Par défaut
    c'est vraiement bizarre!
    j'ai, pour simplifier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    if  consol(0)<(Left(famille1,4)-Left(SQR(ecart_type1),4)) then
                  niveau(1,1)=niveau(1,1)+1
    elseif (Left(famille1,4)-Left(SQR(ecart_type1),4))<consol(0) and consol(0)<Left(famille1,4) then
                  niveau(1,2)=niveau(1,2)+1
    end if
     
    avec:
    consol(0)=14
    Left(famille1,4)=19.6
    Left(famille1,4)-Left(SQR(ecart_type1),4)=16.75
    donc je devrais avoir niveau(1,1)=1 et niveau(1,2)=""
    pourtant c'est l'inverse!!!!!!!!!!!

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 35
    Points : 33
    Points
    33
    Par défaut
    encore un truc tout con de newbie...
    consol(0) c'est un tableau ?
    si oui, il me semble que le premier élément c'est consol(1), non ?

  6. #6
    Membre éclairé
    Avatar de Catbull
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    542
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 542
    Points : 854
    Points
    854
    Par défaut
    Comment sont déclarées tes variables?

    Là tu ne compares pas des nombres mais des chaines de caractères et c'est l'ordre lexicographique qui prend le dessus. Par exemple "100" < "11" est une condition qui retourne True.

    Il serait bon de convertir tes données et de caster explicitement tes variables (CLng, CDbl, CStr, ...) afin de ne pas comparer des choux et des carottes.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 332
    Points : 104
    Points
    104
    Par défaut
    le prob vient de ce bout de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Left(famille1,4)-Left(SQR(ecart_type1),4)
    car si je le remplace par 16 cela marche!
    pourtant quand j'affiche le resultat de ce bout de code, j'ai bien 16,75 qui s'affiche!!!!!!!
    j'y comprend rien!!

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 332
    Points : 104
    Points
    104
    Par défaut
    je suis ds du vbscript et cela n'accepte pas as quand je veux definir ma variable

  9. #9
    HPJ
    HPJ est déconnecté
    Membre averti

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2003
    Messages : 260
    Points : 364
    Points
    364
    Par défaut
    J'ai l'impression que la fonction Left est utilisée pour arrondir ?!
    Si je comprends bien la fonction Round serait bien mieux adaptée et retournerait toujours des nombres (et pas des chaines de caractères sources d'erreur de comparaison).
    Avant de poser une question, merci de chercher dans les rubriques suivantes:
    FAQ VB
    Tutoriaux VB
    Recherche avancée sur le forum

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 332
    Points : 104
    Points
    104
    Par défaut
    merci
    j'ai réussi
    Round pour ecart_type et famille et CDbl pour consol()

    merci bcp!

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

Discussions similaires

  1. [Dates] Probleme de comparaison de date
    Par mathieu77186 dans le forum Langage
    Réponses: 4
    Dernier message: 22/12/2005, 17h21
  2. Comparaison string nombre
    Par yanndublanche dans le forum Langage
    Réponses: 3
    Dernier message: 30/06/2005, 14h51
  3. Comparaison de nombre dans un tableau.
    Par slackjayo dans le forum Algorithmes et structures de données
    Réponses: 18
    Dernier message: 29/04/2005, 17h21
  4. [MASM] Utiliser un .IF pour une comparaison de nombre signés
    Par Crisanar dans le forum x86 32-bits / 64-bits
    Réponses: 3
    Dernier message: 24/11/2004, 16h32
  5. Probleme de compte le nombre de Recordset
    Par nemesys971 dans le forum Access
    Réponses: 5
    Dernier message: 27/10/2004, 15h23

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