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

Algorithmes et structures de données Discussion :

Arrondi un peu compliqué


Sujet :

Algorithmes et structures de données

  1. #1
    Membre habitué
    Inscrit en
    Juillet 2007
    Messages
    433
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 433
    Points : 130
    Points
    130
    Par défaut Arrondi un peu compliqué
    Bonjour,

    Je cherche à faire une fonction d'arrondi un peu amélioré pour un logiciel de gestion commerciale. Il doit permettre d'arrondir à 5, 10, 20, 25, 50 centimes ou 1 euro près et il doit également donner le choix entre arrondi supérieur, inférieur ou plus proche.

    J'ai un peu cherché sur le net mais apparemment y'a pas d'algorithme qui fait ça enfin je n'en ai pas trouvé. Donc s'il y avait une âme charitable qui pouvait me mettre sur la voie. Je pense qu'avec des fonctions mathématiques ça doit pouvoir se faire, des modulos ou des choses dans le genre mais les maths ça remonte un peu pour moi

    Merci d'avance !

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    357
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 357
    Points : 637
    Points
    637
    Par défaut
    S'il donne le choix entre arrondi supérieur et inférieur, où est le problème ?

    Sinon ce sont des intervalles, tu cherches l'intervalle dans lequel se trouve ton nombre, tu regardes sa position par rapport au milieu de cet intervalle.

  3. #3
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 76
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Points : 1 913
    Points
    1 913
    Par défaut
    Pour arrondir à x centimes :
    Multiplier par 100 le prix résultat P (en centimes)
    q=P/100
    r=P%100
    s=r/x
    Arrondi inférieur q*100+s*x en centimes
    Arrondi supérieur q*100+(s+1)x

  4. #4
    Membre habitué
    Inscrit en
    Juillet 2007
    Messages
    433
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 433
    Points : 130
    Points
    130
    Par défaut
    Heu de peur d'avoir l'air bête je comprends pas bien ce que font tes calculs Zavonen si j'applique ta formule pour l'arrondi inférieur en remplaçant q, r et s et avec un arrondi à 5 centimes ça donnerait donc :

    (valeur / 100) * 100 + ((valeur % 100) / 5) * 5

    En fait la première parie avant le + je comprends en fait je comptais faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((int)(valeur * 100)) / 100
    (mais y'a pas de cast en Windev alors j'ai l'air con ) mais je vois pas ce que représente la partie de droite.

  5. #5
    Membre habitué
    Inscrit en
    Juillet 2007
    Messages
    433
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 433
    Points : 130
    Points
    130
    Par défaut
    En fait j'arrive à faire un arrondi standard (au plus proche) :

    (Arrondi ((valeur * 100) / 5, 0) * 5) / 100

    Mais je cherche comment faire un arrondi supérieur et un arrondi inférieur.

  6. #6
    Membre habitué
    Inscrit en
    Juillet 2007
    Messages
    433
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 433
    Points : 130
    Points
    130
    Par défaut
    Ayé ai fini voilà comment j'ai fait :

    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
     
    PROCEDURE MonArrondi (valeur est un monétaire, valArrondi est un entier, typArrondi est une chaîne de caractères)
    tmpVal est un entier = valeur * 100
    x est un entier = 0
     
    SI (valeur = 0) ALORS
    	RENVOYER 0
    SINON
    	SI (typArrondi = "INFERIEUR") ALORS
    		x = - (PartieEntière (valArrondi / 2))
    	SINON SI (typArrondi = "SUPERIEUR") ALORS
    		x = PartieEntière (valArrondi / 2)
    	FIN
    	RENVOYER (Max (Arrondi ((tmpVal + x ) / valArrondi), 0) * valArrondi) / 100
    FIN

Discussions similaires

  1. Mise à jours des points de parrainage un peu compliquée
    Par piere33 dans le forum Requêtes
    Réponses: 5
    Dernier message: 25/10/2006, 18h35
  2. Requete un peu compliqué pour moi
    Par passie dans le forum Langage SQL
    Réponses: 4
    Dernier message: 27/04/2006, 15h08
  3. [MySQL 4.1.17] requete un peu compliqué à faire
    Par Zen_Fou dans le forum Administration
    Réponses: 1
    Dernier message: 26/04/2006, 17h41
  4. code une somme un peu complique
    Par Battosaiii dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 08/04/2006, 16h00
  5. [SQL - ORACLE] Requete un peu compliquée (pour moi)
    Par Worldofdada dans le forum Langage SQL
    Réponses: 15
    Dernier message: 03/11/2005, 08h25

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