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

Vos contributions VB6 Discussion :

Un arrondi universel.


Sujet :

Vos contributions VB6

  1. #1
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut Un arrondi universel.
    Suite à cette discussion, j'ai développé un petit "Extended Round" qui peut arrondir aussi bien à gauche qu'à droite de la virgule.
    Une option (RoundUp) permet de forcer à l'arrondi supérieur (en valeur absolue).
    Pour arrondir à gauche de la virgule, utiliser un nombre négatif pour Digits.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Function ExtRound(Number, _
                      Optional Digits As Integer = 0, _
                      Optional RoundUp As Boolean = False) _
                      As Double
     
      If RoundUp Then
        If Not Fix(Number * 10 ^ Digits) = Number * 10 ^ Digits Then
          ExtRound = (Fix(Number * 10 ^ Digits) + IIf(Number > 0, 1, -1)) / 10 ^ Digits
        End If
      Else
        ExtRound = Round(Number * 10 ^ Digits) / 10 ^ Digits
      End If
    End Function
    Comme toutes les fonctions ayant plusieurs paramètres optionnels, celle-ci accepte les paramètres nommés:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      MsgBox ExtRound(iVal, RoundUp:=True)
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  2. #2
    Membre Expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Par défaut
    Pas mal du tout, j'ai particulièrement aprécié le soucis du détail

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    + IIf(Number > 0, 1, -1))

  3. #3
    Membre Expert
    Avatar de sovo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    1 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 389
    Par défaut
    Tres interessant.

    Citation Envoyé par AlainTech
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      MsgBox ExtRound(iVal, RoundUp:=True)
    Ca existe aussi en vb ?? je ne savais pas ca me rappel mon bon vieux pascal (voir delphi).

  4. #4
    Expert confirmé
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Par défaut
    Citation Envoyé par sovo
    Tres interessant.

    Ca existe aussi en vb ?? je ne savais pas ca me rappel mon bon vieux pascal (voir delphi).
    ca existe surtout en VBA

    Mais en vb aussi, pour nommer un paramètre optionnel, comme l'a dit Alain

    (rien à voir, à part la similitude, avec Delphi ou TOUTES les opérations sont écrites avec := )

  5. #5
    Expert confirmé
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Par défaut
    juste pour le fun :

    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
    Public Enum RoundUpDown
        RoundUp = -1
        RoundDown = 0
    End Enum
     
    Function ExtRound(Number, _
                      Optional Digits As Integer = 0, _
                      Optional RoundUp As RoundUpDown = 0) _
                      As Double
     
        If RoundUp Then
            If Not Fix(Number * 10 ^ Digits) = Number * 10 ^ Digits Then
                ExtRound = (Fix(Number * 10 ^ Digits) + IIf(Number > 0, 1, -1)) / 10 ^ Digits
            End If
        Else
            ExtRound = Round(Number * 10 ^ Digits) / 10 ^ Digits
        End If
    End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        MsgBox ExtRound(1.234, 1, RoundUp)
    joli code Alain, je le mets de suite dans la FAQ

  6. #6
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Merci pour le fun sauf que...

    Il ne s'agit pas de Up ou Down.

    Si on ne force pas Up, on fait un arrondi "normal" à 4-5.

    J'aurais, effectivement, pu faire un tri-state: Up, 4-5 et Down.
    Je vais y réfléchir pour essayer d'en faire quelque chose de "propre".
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  7. #7
    Membre éprouvé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 336
    Par défaut
    Super! Merci!

  8. #8
    Membre régulier
    Inscrit en
    Février 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 11
    Par défaut salut
    Ton code me renvoit 0 pour tout argument entier quand je lui demande un roundup.
    C est normal?

    Sinon c est bien et ca me sert toutes les 5 lignes en ce moment !!!


    JF

  9. #9
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Par défaut
    bonjour,

    j'avais proposé cette solution en VBA qui permet de s'affranchir du test conditionnel.

    A voir si ça fonctionne en VB6 ?

    Cordialement,

    Philippe

Discussions similaires

  1. [VB6][Expert Only ?][ADO] Format universel des dates
    Par HPJ dans le forum VB 6 et antérieur
    Réponses: 16
    Dernier message: 14/02/2004, 10h42
  2. [BigDecimal] les arrondis...
    Par LoulouFifi dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 13/01/2004, 18h37
  3. création d'un bouton de forme arrondie
    Par THIERRY L. dans le forum C++Builder
    Réponses: 2
    Dernier message: 15/12/2003, 14h04
  4. En quoi XML est-il un moyen universel d'échange de données ?
    Par Pomalaix dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 27/01/2003, 11h29
  5. [VB6] Racine carrée + arrondi
    Par Krys29 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 28/10/2002, 13h19

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