bjrs
est-ce qq'un peut me dire si il connait une fonction en c ou c++ ou dans la MFC pour arrondir des doubles � 2 chiffres apr�s la virgule ?
Voir du code ou une procedure ?
bjrs
est-ce qq'un peut me dire si il connait une fonction en c ou c++ ou dans la MFC pour arrondir des doubles � 2 chiffres apr�s la virgule ?
Voir du code ou une procedure ?
Avec du code, je pense qu'on peut faire �a comme �a :
Ca devrait bien marcher, je pense...
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 double l_mydouble = 20,2467; double l_dblTemp = l_mydouble * 100; int l_iTemp = (int) (l_dblTemp); // Arrondi Superieur if ((l_dblTemp - l_iTemp) > 0.5) { l_mydouble = (l_iTemp + 1)/100; } // Arrondi Inferieur else { l_mydouble = (l_iTemp)/100; }
j'ai fait une recherche rapide sur google (he oui).
y'a un PDF qui semble sympa � ce sujet.
Sinon en 2 coups d'oeil ce qui semble utilis� c'est ceil() et floor()
renseigne-toi![]()
Merci les gars , mais j'ai trouv� une solution
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9 code double n; double x = 0.8236547 double y = modf(x*100,&n); n = n/100 ; => n est représenté avec 2 chiffre après la virgule
#include <iostream>
#include <string.h>
//*************** arrondi superieur ou inferiieur **********
using namespace std ;
int main()
{
double l_mydouble = 0;
char chaine[20];
cout << " entrez un chiffre a vigule : "<<endl;
cin >> l_mydouble;
cout <<" vous les vous l'arrondi superieur ou inferieur ? " ;
cin >> chaine;
double l_dblTemp = l_mydouble * 10;
int l_iTemp = (int) (l_dblTemp);
if (strcmp(chaine , "superieur")==0)
{
cout << "Arrondi Superieur"<<endl;
l_mydouble = (l_iTemp + 10)/10;
cout<< l_mydouble<<endl;
}
else
{
cout << "Arrondi Inferieur"<<endl;
l_mydouble = (l_iTemp)/10;
}
cout << l_mydouble << endl;
return 0;
}
Tu es cens� coder en C++, pas en "C sur un compilo C++": Pourquoi utilises-tu un tableau de char (et strcmp) plut�t qu'une std::string?
Aussi, es-tu s�r de cette ligne?
Normalement, quand on arrondit au sup�rieur, on n'ajoute pas le diviseur, mais la valeur juste en-dessous (e.g. pour des entiers, on �crirait +9).
Code : S�lectionner tout - Visualiser dans une fen�tre � part l_mydouble = (l_iTemp + 10)/10;
Ou plus simplement, pour des nombres � virgule flottante on utiliserait ceil().
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.
Bonjour
Je commence tout juste la programmation, c'est les seul fonction que j'ai su utiliser, merci de m'avoir repris.
est ce que c'est possible que vous me faite le m�me programme, mais avec de meilleur fonction ?
merci par avance![]()
Personnellement, j'aurais fait comme ceci:
Code C++ : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 #include <iostream> #include <string> #include <sstream> #include <cmath> //*************** arrondi superieur ou inferiieur ********** using namespace std ; int main() { double mydouble = 0; string chaine, dummy; //Si on fait cin >> mydouble, on se retrouve avec le caractère \n qui reste dans cin. //Pour éviter ce problème, on lit toute une ligne puis on convertit avec un istringstream. cout << "Entrez un nombre a vigule : "<<endl; getline(cin, chaine); istringstream(chaine) >> mydouble; cout << "Vous avez entre : " << mydouble << endl; //On lit la chaîne normalement cout <<"Voulez-vous l'arrondi superieur ou inferieur ? " ; getline(cin, chaine); //On est obligé de multiplier pour décaler la virgule, car //le standard ne donne pas de fonction d'arrondi à X chiffres: //les fonctions C++ arrondissent toujours à l'entier choisi. //Pas grave, on re-décalera dans l'autre sens après en divisant. double dblTemp = mydouble * 100.0; double dblArrondi; if (chaine == "superieur") { cout << "Arrondi Superieur :"<<endl; dblArrondi = ceil(dblTemp)/100.0; } else { cout << "Arrondi Inferieur :"<<endl; dblArrondi = floor(dblTemp)/100.0; } //Maintenant, on a notre double arrondi à deux chiffres. cout << dblArrondi << endl; return 0; }
Ce code utilise enti�rement du C++ standard, ind�pendant de MFC.
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