Menu

[c++] Comment je peut arrondir mes floats ? [Résolu/Fermé]

Joe - 6 juil. 2004 à 16:28 - Dernière réponse :  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
Afficher la suite 

6 réponses

Meilleure réponse
Ravachol 565 Messages postés vendredi 5 mars 2004Date d'inscription 30 octobre 2005 Dernière intervention - 6 juil. 2004 à 19:09
1
Merci
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

Merci Ravachol 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

CCM a aidé 24270 internautes ce mois-ci

blurk 489 Messages postés vendredi 16 avril 2004Date d'inscription 15 mars 2009 Dernière intervention - 6 juil. 2004 à 16:42
0
Merci
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
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.........
Canard007 5939 Messages postés mercredi 26 mai 2004Date d'inscriptionContributeurStatut 18 septembre 2009 Dernière intervention - 6 juil. 2004 à 18:01
0
Merci
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)

teebo 33570 Messages postés jeudi 14 octobre 2004Date d'inscriptionModérateurStatut 24 février 2011 Dernière intervention - 6 juil. 2004 à 18:27
0
Merci
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
Merci
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;