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