[c++] Comment je peut arrondir mes floats ?

Résolu/Fermé
Joe - 6 juil. 2004 à 16:28
 tutu - 4 mai 2009 à 23:33
Comment je peux arrondir des float a exactement 6 chiffres significatifs.

c'est a dire 15,15487789 -> 15.1549
3 -> 3.00000

Merci

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
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.

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
1
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
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
0
En fait je veut que mon float soit affiché avec 6 chiffres significatifs....

Dans to algorithme, on prend 6 chiffres significatifs, mais on ne les affiche pas forcement.........
0
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
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)

0
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
Pour que ce soit plus propre tu devrais faire une classe...

.  .  Dieu a inventé le chat
\_/  pour que l'homme puisse caresser le tigre
0

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;
0