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

C Discussion :

Comment arrondir un nombre a 2 unités prés par défaut ?


Sujet :

C

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    384
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 384
    Points : 52
    Points
    52
    Par défaut Comment arrondir un nombre a 2 unités prés par défaut ?
    Bonjour

    Je dispose d'une valeur numérique ( int ) qui varie assez rapidement, mon but est de rendre plus constante cette donnée en ne gardant que les valeurs paires de celle-ci en arrondissant par défaut.

    Par exemple :

    ma valeur est égale à 0 - > on remplacera cette valeur par 0
    ma valeur est égale à 1 - > on remplacera cette valeur par 0
    ma valeur est égale à 3 - > on remplacera cette valeur par 2
    ma valeur est égale à 19 - > on remplacera cette valeur par 18

    Pourriez vous m'indiquer comment réaliser cela svp ?

    Je vous remercie de votre aide

  2. #2
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Quel comportement veux-tu pour les valeurs négatives?
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  3. #3
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    384
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 384
    Points : 52
    Points
    52
    Par défaut
    Bonjour et merci de ton aide,

    J'ai oublié de préciser : se sont toutes des valeurs absolues, toutes positives.

  4. #4
    Membre expert

    Homme Profil pro
    Spécialiste progiciel
    Inscrit en
    Février 2010
    Messages
    1 747
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Spécialiste progiciel
    Secteur : Service public

    Informations forums :
    Inscription : Février 2010
    Messages : 1 747
    Points : 3 016
    Points
    3 016
    Par défaut
    Bonjour,

    il y a une solution, tu testes si la partie entière de ta valeur est paire.
    Si c'est le cas tu prends sa partie entière.
    Sinon, tu prends la partie entière de ton nombre -1


    Cordialement,
    Christophe
    Cordialement,
    Christophe

    Merci de ne pas oublier de mettre résolu quand le sujet l'est. Cela aide tous les DVPnautes dans leur recherche

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Points : 1 750
    Points
    1 750
    Par défaut
    Il suffit de diviser par deux puis remultiplier par deux.

  6. #6
    Membre éprouvé Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Points : 1 132
    Points
    1 132
    Par défaut
    Il suffit de mettre le LSB à 0 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include  <stdio.h>
    #include  <stdlib.h>
     
    int main( void )
    {
    	unsigned int i;
     
    	for( i=0; i<20; i++) {
    		printf("%d\t%d\n", i, i&~1);
    	}
     
    	return 0;
    }
    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
    0       0
    1       0
    2       2
    3       2
    4       4
    5       4
    6       6
    7       6
    8       8
    9       8
    10      10
    11      10
    12      12
    13      12
    14      14
    15      14
    16      16
    17      16
    18      18
    19      18
    Ce qui revient plus ou moins à diviser puis multiplier par 2, comme déjà proposé par jeroman.
    To start press any key. (reading screen) Where's the "any" key? I see Esc, Catarl, and Pig Up. There doesn't seem to be any "any" key. Wo! All this computer hacking is making me thirsty. I think I'll order a Tab. (presses TAB key). -- HOMER --

  7. #7
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    384
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 384
    Points : 52
    Points
    52
    Par défaut
    Merci,

    Je ne peux pas utiliser printf car c'est du C embarqué.

    Est il possible de procéder ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int main( void )
    {
    	unsigned int i;
     
    	for( i=0; i<20; i++) {
    		i = i&~1;
    	}
     
    	return 0;
    }

  8. #8
    Membre éprouvé Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Points : 1 132
    Points
    1 132
    Par défaut
    Je ne sais pas le printf() c'étais juste pour l'affichage...
    La réponse à ta question est: valeur & ~1.
    To start press any key. (reading screen) Where's the "any" key? I see Esc, Catarl, and Pig Up. There doesn't seem to be any "any" key. Wo! All this computer hacking is making me thirsty. I think I'll order a Tab. (presses TAB key). -- HOMER --

  9. #9
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Stocke plutôt les résultats dans un tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    int main( void )
    {
        unsigned int i, t[20];
     
        for(i = 0;  i < 20; i++) {
            t[i] = i & ~1;
        }
     
        utiliser_t();
     
        return 0;
    }

  10. #10
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par jeroman Voir le message
    Il suffit de diviser par deux puis remultiplier par deux.
    Citation Envoyé par ssmario2 Voir le message
    Je ne sais pas le printf() c'étais juste pour l'affichage...
    La réponse à ta question est: valeur & ~1.
    A noter que les deux techniques donnent des résultats différents pour les valeurs négatives (d'où ma question initiale).
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

Discussions similaires

  1. Comment arrondir un nombre ?
    Par arm3366 dans le forum Langage
    Réponses: 11
    Dernier message: 19/07/2011, 16h53
  2. Comment arrondir un nombre
    Par arthy dans le forum Fortran
    Réponses: 1
    Dernier message: 14/03/2008, 11h56
  3. [Source] Comment arrondir un nombre avec une précision variable
    Par OhMonBato dans le forum Vos contributions VB6
    Réponses: 2
    Dernier message: 31/03/2007, 12h44
  4. Comment arrondir un nombre?
    Par Dub's dans le forum C
    Réponses: 4
    Dernier message: 12/03/2007, 19h25
  5. Réponses: 2
    Dernier message: 26/10/2006, 17h52

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