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
Version imprimable
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:
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:
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
Ca marche si on fait un cast double???
euh ... ? je ne sais pas, à tester... c'est du c++ pur ca ?Citation:
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:
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.
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...