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 :

Arrondir un chiffre à 2 chiffres après la virgule


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 29
    Par défaut Arrondir un chiffre à 2 chiffres après la virgule
    Bonjour,

    Un petit problème en C++ :

    Je récupère des chiffres via un port RS232 (je vous passe les détails) et j'obtiens des chiffres du style 9.3846 , 10.3271 , etc ...

    Je voudrais obtenir un arrondi de ces valeurs de la manière la plus simple qui soit, à 2 chiffres après la virgule. Si quelqu'un connait une librairie Qt (je développe sous Linux, personne n'est parfait ) ou autres, qui me permettrait de faire ce traitement, je l'en remercie d'avance !

  2. #2
    Membre chevronné Avatar de Flo.
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2002
    Messages : 379
    Par défaut
    Salut,

    bon je suis sur qu'il y a beaucoup mieux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    // valeur originale
    double valeur = 10.4237;
     
    // on recupère la valeur originale * 100 en entier (on conserve seulement les 2 chiffres apres la virgule)
    int entier = (int)(valeur * 100.0);
     
    // on regarde si il faut arrondir à la valeur supérieure
    if(100.0 * valeur - (double)entier >= 0.5)
      ++entier;
     
    // on divise par 100, l'entier pour obtenir le résultat
    double result = (double)entier / 100.0;
    Voila.

    Flo.

  3. #3
    Membre chevronné Avatar de Flo.
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2002
    Messages : 379
    Par défaut
    Peut être même comme ça c'est un peu mieux (on s'épargne le if) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    // valeur originale 
    double valeur = 10.4237;
     
    // on fait d'abord l'arrondi en ajoutant 0.005 puis on recupère la valeur originale * 100 en entier (on conserve seulement les 2 chiffres apres la virgule) 
    int entier = (int)((0.005 + valeur) * 100.0);
     
    // on redivise par 100
    double result = (double)entier / 100.0;
    A noter que je l'ai pas testé.

    Flo.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 29
    Par défaut
    merci bien FloPoint !!!

    c vrai que j'aurais pu y penser mais je chercher, a la base, une methode du genre roundTo (vive Builder) ou setPrecison (ki ne marchent pas ss LInux). Mais ta methode marche parfaitement, alor j'adopte!!

    encore merci!!

  5. #5
    Membre chevronné Avatar de Flo.
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2002
    Messages : 379
    Par défaut
    N'oublie pas de mettre Résolu une fois que tu considères ton problème ... résolu.

    A+

    Flo.

  6. #6
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include <iomanip>
    #include <sstream>
    ...
     
    	double d = 10.1257;
    	double d_arrondi;
     
    // affichages arrondis : 10.13
    	cout << std::setprecision(4) << d << endl;
    	printf("%3.2lf\n",d);
     
    // arrondir le double : d = 10.13
    	std::istringstream iss(d);
    	iss >> std::setprecision(4) >> d;
    avec le istringstream, je ne suis pas sur à 100%. l'arrondi est effectué au "warning" près.


    Enjoy yourself !

  7. #7
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 158
    Par défaut
    Bonsoir,

    Je cherchais dans le mm sujet ie arrondir un double pour avoir seulement 2 chiffres après la virgule. J'ai trouvé cette discussion.
    Je veux savoir pourquoi ajoutez vous le 0.005? A quoi ça sert?
    et est ce que ça pourrais nuire aux résultats? merci d'avance.

  8. #8
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Waa!! Ca c'est du déterrage de thread, tu as vu que cette question date de 2005 ...

    Sinon,

    Pour arrondir, à 2 chiffres après la virgule, tu multiplies par 100, tu gardes la partie entière et tu redivises par 100.

    pour 12,8888 par exemple, cela donne 1288 puis 12,88.

    Et dans ce cas, cela n'arrondi pas, cela tronque.

    par contre, si on ajoute 0,005, cela marche

    12,8888 + 0,005 = 12,8938 * 100 = 1289 divisé par 100 = 12,89.

    On a bien arrondi.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  9. #9
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 158
    Par défaut
    ok merci.
    vous avez bien expliquez et j'ai comprit qu'en fait moi je cherche à tronquer et non pas à arrondir.

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

Discussions similaires

  1. [AC-2007] Récupérer certains chiffres avant et après le virgule dans un nombre
    Par gerarddurand dans le forum VBA Access
    Réponses: 4
    Dernier message: 06/12/2012, 15h26
  2. Réponses: 7
    Dernier message: 01/02/2007, 19h32
  3. Réponses: 2
    Dernier message: 02/08/2006, 17h04
  4. Variable nombre : arrondir à 5 chiffres après la virgule
    Par micatmidog dans le forum Général Python
    Réponses: 7
    Dernier message: 21/12/2005, 10h03
  5. arrondir un nombre à 2 chiffres après la virgule
    Par El Saigneur dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 01/02/2005, 08h36

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