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 :

Problème de calcul


Sujet :

VBScript

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 19
    Par défaut Problème de calcul
    Bonjour,
    je cherche à récupérer le chiffre n d'un nombre décimal.
    Par exemple je veux récupérer le chiffre des centièmes de 8,95 (qui est donc 5.. )

    Et j'écris donc tout naturellement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    x = 8.95
    centieme = Int(100*x- 10*Int(10*x))
    et là centieme = 4,999999999999999


    J'ai même testé directement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    x = 8.95
    centieme = 100*8,95- 890)
    et pareil.

    Une idée?

  2. #2
    Expert confirmé
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 844
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 844
    Par défaut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    x = 8.95
    centieme = Round(100*x- 10*Int(10*x))
    MsgBox centieme

  3. #3
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    C'est certainement dépendant quelque peu les sous-entendus silencieux: on peut faire ceci qui donne le digit sans rondement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if x>=0 then
        centieme=int(100*x) mod 10
    else
        centieme=fix(100*x) mod 10
    end if

  4. #4
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 130
    Par défaut
    Salut

    Ou encore
    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
    Dim CHiffre
    Const Dixieme = 1
    Const Centieme = 2
    Const Millieme = 3
     
    Function ExtratEnieme(LeCHiffre, Rang)
    ExtratEnieme = Mid(LeCHiffre, (InStr(1, LeCHiffre, ",", vbTextCompare) + Rang), 1)
    End Function
     
    CHiffre = 12.3456789
     
     
    MsgBox ExtratEnieme(CHiffre, Dixieme)
    MsgBox ExtratEnieme(CHiffre, Centieme)
    MsgBox ExtratEnieme(CHiffre, Millieme)
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 19
    Par défaut
    Oups, désolé, mauvaise manip, j'ai répondu hier mais le message ne s'est pas enregistré. Donc on recommence...

    Beh d'abord merci pour vos réponse, quand même!

    @tsuji : même problème. Ta formule marche sur le papier, mais y'a toujours un problème d'arrondi quelque part. Fais le avec 8.95 et tu vas voir ça renvoie 4 au lieu de 5.

    @ProgElecT : Ah oui pas mal. Fonctionner en mode chaine de caractère me parait une bonne idée, justement pour éviter les calculs et donc les arrondis.
    Après quelques tests, il y a un problème que je ne m'explique pas. Essaie avec un nombre entier sans virgule écrite, c'est bizarre. ça donne ça:
    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
     
    Si Chiffre = 1 alors
    dixième = 1
    centième = 0
    millième = 0
     
    Si Chiffre = 12 alors
    dixième = 1
    centième = 2
    millième = 0
     
    Si Chiffre = 123 alors
    dixième = 1
    centième = 2
    millième = 3
    Par contre si chiffre = 1.0 alors tout rentre dans l'ordre. Bizarre, non.

    Bon, j'ai contourné le truc en faisant le test:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    If Int(chiffre)=chiffre Then
    	chiffre=Int(chiffre) & "," & "0"
    End If
    C'est pas très propre mais ça a l'air de marcher. Je confirme plus tard avec des tests sur plusieurs pages.

  6. #6
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    @tsuji : même problème
    C'est vrai, je suis désolé.

    Est-ce que ceci réussit mieux?
    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
    x=8.95
    if isnumeric(x) then
        set rx=new regexp
        with rx
            .pattern="((\+|-)?\d*\.\d)(\d)"
        end with
        if rx.test(cstr(x)) then
            centieme=rx.execute(cstr(x))(0).submatches(2)
        else
            centieme="0"
        end if
        wscript.echo "centieme=" & centieme
    else
        wscript.echo "[" & x & "] n'est pas un nomber"
    end if

  7. #7
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 130
    Par défaut
    On a chacun sa solution
    @ProgElecT : Ah oui pas mal. Fonctionner en mode chaine de caractère me parait une bonne idée, justement pour éviter les calculs et donc les arrondis.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Function ExtratEnieme(LeCHiffre, Rang)
    LeCHiffre = FormatNumber(LeCHiffre,3)
    ExtratEnieme = Mid(LeCHiffre, (InStr(1, LeCHiffre, ",", vbTextCompare) + Rang), 1)
    End Function
    La ligne 2 de la fonction utilise FormatNumber elle limite à 3 décimales ou ajoute 3 zéros, cela reste valable si tu ne veux récupérer au maximum que le millième, si non il faudra augmenter le 2éme paramètre (6 pour le millionième, 9 pour le milliardième ......)
    Reste que, souvent le traitement numérique est beaucoup plus rapide que le traitement de caractères, il me semble que pour ce cas précis cela devrait pas être un handicape.
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

Discussions similaires

  1. Problème de calcule en SQL !
    Par FilipeVV dans le forum Langage SQL
    Réponses: 3
    Dernier message: 02/09/2005, 11h45
  2. Problème de calcul matricielle
    Par Clad3 dans le forum Algorithmes et structures de données
    Réponses: 21
    Dernier message: 29/06/2005, 21h45
  3. problème de calcul des normales par sommet
    Par captainSeb dans le forum OpenGL
    Réponses: 2
    Dernier message: 21/01/2005, 13h42
  4. [Calendar]Problème de calcul de date
    Par valerie90 dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 08/12/2004, 12h13
  5. Problème de calcul unix_timestamp
    Par petit_stagiaire dans le forum Administration
    Réponses: 2
    Dernier message: 28/04/2004, 15h27

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