Conversion Float to String

Signaler
Messages postés
8
Date d'inscription
samedi 21 juillet 2001
Statut
Membre
Dernière intervention
12 septembre 2002
-
cs_sofoot
Messages postés
7
Date d'inscription
mercredi 20 mai 2009
Statut
Membre
Dernière intervention
23 mai 2012
-
Bonjour à tous !
je suis en train de me prendre la tête pour créer une fonction de conversion d'un réel en une chaine de caractère (problème du débutant avec très peu de doc) donc si quelqu'un pouvait m'en donner une ou me filer deux-trois conseils.....

merc i!

8 réponses

Messages postés
40
Date d'inscription
lundi 17 décembre 2001
Statut
Membre
Dernière intervention
25 février 2004

La méthode que j'utilise tt le temps consiste à utiliser sprintf. Exemple :

char maChaine[32];
float monFloat=17.5289789;
sprintf(maChaine,"%f",monFloat);

En regardant la doc de sprintf, tu dois pouvoir trouver pas mal d'astuces pour mettre en forme des floats dans tes chaines (par exemple, le nombre de chiffre derrière la virgule ou le nombre total de chiffres).
Messages postés
11
Date d'inscription
samedi 12 janvier 2002
Statut
Membre
Dernière intervention
22 juillet 2003

tiens en voici une que j'ai cree a mes debut (elle bug pour une raison qui m'echappe mais ca peu toujours d'aider)nb: cree sur Dev-Cpp:

#include
#include <stdlib.h>
#include <stdio.h>

bool transfo(double don,char *tran,int taille) //transforme un double en chaine de caractere.
{
double nb=don;
int inc=0,i=0,pui=0;
if(nb<0)
{
*tran='-';
nb*=-1;
i++;
}
while(nb>=1) {nb/=10;inc++;}
int rep=0;
for(int chi=0;rep!=5 && i<taille;i++,inc--)
{
nb*=10;
if(inc==0) *(tran+i++)='.';
if(chi==(int)(nb) && inc<0) rep++;
else {chi=(int)(nb);rep=0;}
*(tran+i)=(int)(nb)+48;
nb-=(int)(nb);
}
if(rep==5) i-=4;
if(i!=taille)
{
*(tran+i)='\0';
return true;
}
else
{
*(tran+i-1)='\0';
return false;
}
}

int main()
{
double tes=-100000;
int tai=50;
char *resultat;
resultat=new char[tai];
transfo(tes,resultat,50);
for(int i=0;*(resultat+i);i++) cout<<*(resultat+i);
cout<<endl;
system("PAUSE");
return 0;
}
Messages postés
8
Date d'inscription
samedi 21 juillet 2001
Statut
Membre
Dernière intervention
12 septembre 2002

Merci à vous deux !
ça me permet d'avancer pas mal (mais j'ai pas encore fini ;))
Messages postés
246
Date d'inscription
dimanche 2 juin 2002
Statut
Membre
Dernière intervention
11 septembre 2016
1
-------------------------------
Réponse au message :
-------------------------------

Merci à vous deux !
ça me permet d'avancer pas mal (mais j'ai pas encore fini ;))
Messages postés
8
Date d'inscription
samedi 21 juillet 2001
Statut
Membre
Dernière intervention
12 septembre 2002

merci encore, j'ai trouvé depuis (et fait pas mal de progrès, je m'attaque à Visual C++ maintenant ! ;))
Messages postés
16
Date d'inscription
dimanche 2 février 2003
Statut
Membre
Dernière intervention
3 juin 2008

bool FtoA(double don,char *tran)
{
double nbf=don;
int inc=0,i=0,end=0;
int rep=0;
int chi;
int nb;

if(nbf<0)
  {
  tran[0]='-';
  nbf=-nbf;
  ++i;
  }

while(nbf>=1) {nbf/=10;++inc;}

for(chi=0;rep!=5 &&!end ;++i,--inc)
  {
   nbf*=10;
   nb=(int)nbf;

   if(double(nb)==double(nbf))
  {end=1;}

   nb%=10;

   if(inc==0)
      {
      tran[i]='.';
      ++i;
      }

   if(chi==nb && inc<0)
     {++rep;}
   else
     {
     chi=nb;
     rep=0;
     }

  tran[i]=nb+'0';
  }

tran[i]=0;

return end;
}
Messages postés
16
Date d'inscription
dimanche 2 février 2003
Statut
Membre
Dernière intervention
3 juin 2008

J'ai essayé et comme ça marchait pas, j'ai fait des retouches, et voilà

bool FtoA(double don,char *tran)
{
double nbf=don;
int inc=0,i=0,end=0;
int nb;

if(nbf<0)
  {
  tran[0]='-';
  nbf=-nbf;
  ++i;
  }

while(nbf>=1) {nbf/=10;++inc;}

for(; !end ;++i,--inc)
  {
   nbf*=10;
   nb=(int)nbf;

   if(double(nb)==double(nbf) ){end=1;}

   nb%=10;

   if(inc==0)
      {
      tran[i]='.';
      ++i;
      }
  tran[i]=nb+'0';
  }

tran[i]=0;

return end;
}

Quand on peut échapper à printf et sprintf, ce sont quelques Ko de gagnés.
(désolé pour le message précédent, si le webmaster peut l'effacer ?)
Messages postés
7
Date d'inscription
mercredi 20 mai 2009
Statut
Membre
Dernière intervention
23 mai 2012

Bonjour,
Pour ce que sa intérèsse, il y a une méthode beaucoup plus simple sous C++Builder. Il suffit d'utiliser "FloatToStr()".
Exemple : FloatToStr(MontantRecue) avec MontantRecue déclarer en Float.

Bonne continuation à tous.


Tout ordinateur est obsolète au plus tard à son déballage.