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 :

[C++] faire un arrondi sur un double


Sujet :

C++

  1. #1
    Membre averti
    Inscrit en
    Juillet 2004
    Messages
    19
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 19
    Par d�faut [C++] faire un arrondi sur un double
    Salut,

    je cherche a faire un arrondi sur un double en pur C++

    un peu comme en dot.net
    17,987 = Math.round(17,987654, 3 )

    si quelqu'un a une id�e

    merci

  2. #2
    Invit�(e)
    Invit�(e)
    Par d�faut
    Bonjour

    en utilisant une bibliotheque du c, on peut faire :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    #include <cmath>
    ...
    double y,x
    y = floor(x) //167.1860 -> 167
    y = (1./100.) * floor(x * 100.) //167.1860 -> 167.18
    ou m�me -sans include- :
    double x,y
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    y = (int)x //167.1860 -> 167
    y = (1./100.) * ((int)(x * 100.)) //167.1860 -> 167.18

    Attention, les m�thodes donn�es ne renverront que l'arrondi par valeur inf�rieure.

    mabu

  3. #3
    Membre �m�rite Avatar de reggae
    Profil pro
    Inscrit en
    Ao�t 2005
    Messages
    773
    D�tails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Ao�t 2005
    Messages : 773
    Par d�faut
    Ca marche si on fait un cast double???

  4. #4
    Invit�(e)
    Invit�(e)
    Par d�faut
    Citation Envoy� par reggae
    Ca marche si on fait un cast double???
    euh ... ? je ne sais pas, � tester... c'est du c++ pur ca ?

  5. #5
    R�dacteur/Mod�rateur
    Avatar de JolyLoic
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    5 463
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 51
    Localisation : France, Yvelines (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 5 463
    Par d�faut
    La notion d'arrondi sur un nombre � virgule flottante est un pi�ge, en informatique. C'est impossible. Exemple :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <iostream>
    #include <iomanip>
     
    using namespace std;
     
    int main()
    {
    	double exemple = 0.123456789;
    	double arrondi = (1./10.) * ((int)(exemple * 10.)) ;
    	cout << arrondi << endl;
    	cout << setprecision(20) << arrondi << endl;
    	cin.ignore();
    }
    Sur mon compilo, la premi�re ligne peut faire croire qu'on a arrondi (elle affiche 0.1), mais la deuxi�me montre qu'il n'en est rien (elle affiche 0.10000000000000001). Un nombre tel que 0.1 (et plein d'autres) ne peut pas exister sous forme de nombre � virgule flottante cod� en base 2.

    La question est maintenant pourquoi tu veux arrondir. Si c'est pour g�rer l'affichage, je te conseilles de te tourner vers les manipulateurs du flux, afin de choisir te mise en forme.

    Si c'est pour faire des calculs (comme du mon�taire), alors float ou double ne sont pas des types adapt�s. Il te faut cr�er tes propres types mon�taires qui respectent les r�gles d'arrondi d�finies dans la loi du pays o� tu veux utiliser ton code.
    Ma session aux Microsoft TechDays 2013 : D�velopper en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage � la d�couverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'h�sitez pas � me contacter.

  6. #6
    Membre �m�rite Avatar de reggae
    Profil pro
    Inscrit en
    Ao�t 2005
    Messages
    773
    D�tails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Ao�t 2005
    Messages : 773
    Par d�faut
    Non peut �tre pas... tu as sans doute raison ce n'est pas tr�s "propre"!

  7. #7
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Pour faire des calculs mon�taires pr�cis, les calculs � virgule flottante sont d�conseill�s en effet...

    Mieux vaut utiliser des nombres � virgule fixe, des nombres directement exprim�s en centimes ou bien s�parer carr�ment la partie enti�re et la partie d�cimale...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. probl�me d'arrondi sur un Double
    Par Gordon Freeman dans le forum G�n�ral Java
    R�ponses: 2
    Dernier message: 23/06/2010, 10h35
  2. [XSLT] Faire une boucle sur une variable [i]
    Par PoT_de_NuTeLLa dans le forum XSL/XSLT/XPATH
    R�ponses: 8
    Dernier message: 07/06/2010, 12h45
  3. Double arrondi sur un dataset
    Par isachat666 dans le forum Bases de donn�es
    R�ponses: 7
    Dernier message: 02/06/2006, 13h07
  4. [VB.Net] Faire du JS sur des contrôles côté serveur
    Par TagadaTsoin dans le forum ASP.NET
    R�ponses: 4
    Dernier message: 03/11/2003, 15h51
  5. [VB6][impression]Comment faire des effets sur les polices ?
    Par le.dod dans le forum VB 6 et ant�rieur
    R�ponses: 11
    Dernier message: 08/11/2002, 10h31

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