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.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager