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
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
Bonjour
en utilisant une bibliotheque du c, on peut faire :
ou m�me -sans include- :
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
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
euh ... ? je ne sais pas, � tester... c'est du c++ pur ca ?Envoy� par reggae
La notion d'arrondi sur un nombre � virgule flottante est un pi�ge, en informatique. C'est impossible. Exemple :
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.
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(); }
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.
Non peut �tre pas... tu as sans doute raison ce n'est pas tr�s "propre"!
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.
Partager