[c++] Comment je peut arrondir mes floats ?
Résolu/Fermé5 réponses
Ravachol
Messages postés
560
Date d'inscription
vendredi 5 mars 2004
Statut
Membre
Dernière intervention
30 octobre 2005
120
6 juil. 2004 à 19:09
6 juil. 2004 à 19:09
Salut,
sinon tu peux faire un truc dans ce genre la.
Bon c'est juste pour le principe il faudrait le mettre au propre et pourquoi pas dans une classe comme le proposait teebo.
A++
La pensée ne commence qu'avec le doute.
ROGER MARTIN DU GARD
sinon tu peux faire un truc dans ce genre la.
Bon c'est juste pour le principe il faudrait le mettre au propre et pourquoi pas dans une classe comme le proposait teebo.
int main(int argc, char *argv[]) { double d1 = 9.3248656565; char ch1[10]; char form[5]; if (d1<10) strcpy(form,"%.5f"); else if (d1<100) strcpy(form,"%.4f"); else if (d1<1000) strcpy(form, "%.3f"); sprintf(ch1, form, d1); cout << ch1 << endl; return EXIT_SUCCESS; }
A++
La pensée ne commence qu'avec le doute.
ROGER MARTIN DU GARD
blurk
Messages postés
486
Date d'inscription
vendredi 16 avril 2004
Statut
Membre
Dernière intervention
15 mars 2009
160
6 juil. 2004 à 16:42
6 juil. 2004 à 16:42
salut!
arrondi supérieur (en C, dans math.h ontrouve ceil() qui le fait)
multiplier par 100000 et mettre dans un integer (ou long)
ajouter 5
mettre le resultat dans un float (ou double) diviser par 100000
arrondi inférieur (en C, dans math.h ontrouve floor() qui le fait)
multiplier par 100000 et mettre dans un integer (ou long)
soustraire 5
mettre le resultat dans un float (ou double) diviser par 100000
la valeur 100000 signifie qu'on arrondit le 4e chiffre après la virgule, comme dans ton exemple.
bien sur, si tu programmes en C (ça j'en sais rien), ceil et floor font le boulot expliqué là dessus.
J'aime pas VB parce qu'il fait l'arrondi sans demander.
sinon avec n'importe quel language ça devrait marcher.
cordialement
arrondi supérieur (en C, dans math.h ontrouve ceil() qui le fait)
multiplier par 100000 et mettre dans un integer (ou long)
ajouter 5
mettre le resultat dans un float (ou double) diviser par 100000
arrondi inférieur (en C, dans math.h ontrouve floor() qui le fait)
multiplier par 100000 et mettre dans un integer (ou long)
soustraire 5
mettre le resultat dans un float (ou double) diviser par 100000
la valeur 100000 signifie qu'on arrondit le 4e chiffre après la virgule, comme dans ton exemple.
bien sur, si tu programmes en C (ça j'en sais rien), ceil et floor font le boulot expliqué là dessus.
J'aime pas VB parce qu'il fait l'arrondi sans demander.
sinon avec n'importe quel language ça devrait marcher.
cordialement
Canard007
Messages postés
5929
Date d'inscription
mercredi 26 mai 2004
Statut
Contributeur
Dernière intervention
18 septembre 2009
215
6 juil. 2004 à 18:01
6 juil. 2004 à 18:01
ba apres pour etre sur que tu as bien 6 chiffres signifiquatif apres la virgule tu ecrit le float dans une string
sprintf(..) et tu compte combien il y a de caractere apres la virgule (strcmp(chaine1,chaine2) (1 caractere= 1 chiffre) ensuite tu n as plus qu a rajouté strcpy() des 0 manquant dans la string..ensuite tu affiche ta string.. (fonctions dans string.h)
sprintf(..) et tu compte combien il y a de caractere apres la virgule (strcmp(chaine1,chaine2) (1 caractere= 1 chiffre) ensuite tu n as plus qu a rajouté strcpy() des 0 manquant dans la string..ensuite tu affiche ta string.. (fonctions dans string.h)
teebo
Messages postés
33491
Date d'inscription
jeudi 14 octobre 2004
Statut
Modérateur
Dernière intervention
24 février 2011
1 793
6 juil. 2004 à 18:27
6 juil. 2004 à 18:27
Pour que ce soit plus propre tu devrais faire une classe...
. . Dieu a inventé le chat
\_/ pour que l'homme puisse caresser le tigre
. . Dieu a inventé le chat
\_/ pour que l'homme puisse caresser le tigre
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Je rencontrais le mêmes probleme pour remplir des bases avec des nombre , ci dessous un source qui permet
d'additionner une data d'une base avec un float .
double NbrTraitDouble;
float NbrTrait;
NbrTraitDouble = DataModule1->Table1->FieldValues["valeur"];
NbrTraitDouble = NbrTraitDouble + NbrTrait;
// le coef 10000 me place la précision à 4 chiffre après la virgule
NbrTraitDouble = NbrTraitDouble * 10000;
NbrTraitDouble = ceil(NbrTraitDouble);
NbrTraitDouble = NbrTraitDouble /10000;
DataModule1->Table1->FieldValues["valeur"] = NbrTraitDouble;
d'additionner une data d'une base avec un float .
double NbrTraitDouble;
float NbrTrait;
NbrTraitDouble = DataModule1->Table1->FieldValues["valeur"];
NbrTraitDouble = NbrTraitDouble + NbrTrait;
// le coef 10000 me place la précision à 4 chiffre après la virgule
NbrTraitDouble = NbrTraitDouble * 10000;
NbrTraitDouble = ceil(NbrTraitDouble);
NbrTraitDouble = NbrTraitDouble /10000;
DataModule1->Table1->FieldValues["valeur"] = NbrTraitDouble;