 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Adrien Treccani Guest
|
Posted: Sat Jul 19, 2003 3:54 pm Post subject: Re: float -> CString |
|
|
| Quote: | Je cherche, en Visual C++ 6, à écrire le contenu d'un float dans un CEdit.
|
Tu es HS ici, CString est une classe de la MFC, donc de programmation
spécifique windows :
fr.comp.os.ms-windows.programmation.
<HS>
Regarde du côté de CString::Format()
</HS>
|
|
| Back to top |
|
 |
M.B. Guest
|
Posted: Sat Jul 19, 2003 6:25 pm Post subject: Re: float -> CString |
|
|
CString str;
float f = ....
str.Format("%f", f);
MB
"Olivier" <stroumpfetteaut (AT) aol (DOT) comnorepons> a écrit dans le message news:
[email]20030719113440.02873.00000152 (AT) mb-m19 (DOT) aol.com[/email]...
| Quote: | Bonjour,
Je cherche, en Visual C++ 6, à écrire le contenu d'un float dans un CEdit.
Après quelques recherches dans la MSDN j'ai trouvé la fonction _fcvt qui
renvoie en fait un char* mais sans le "." ou "," donc ce n'est pas très
utile
(même si elle indique la position de la virgule dans la chaine).
Existerait-il une fonction qui permette de convertir un float en CString
ou en
char* mais en mettant le "." o ou la virgule ?
Merci par avance de répondre dans le forum.
|
|
|
| Back to top |
|
 |
smj92I Guest
|
Posted: Sun Jul 20, 2003 7:23 am Post subject: Re: float -> CString |
|
|
en utilisant le char * t'auras:
float F;
char S[256];
........................
sprintf(S, "%f", F);
"Olivier" <stroumpfetteaut (AT) aol (DOT) comnorepons> a écrit dans le message de news:
[email]20030719113440.02873.00000152 (AT) mb-m19 (DOT) aol.com[/email]...
| Quote: | Bonjour,
Je cherche, en Visual C++ 6, à écrire le contenu d'un float dans un CEdit.
Après quelques recherches dans la MSDN j'ai trouvé la fonction _fcvt qui
renvoie en fait un char* mais sans le "." ou "," donc ce n'est pas très
utile
(même si elle indique la position de la virgule dans la chaine).
Existerait-il une fonction qui permette de convertir un float en CString
ou en
char* mais en mettant le "." o ou la virgule ?
Merci par avance de répondre dans le forum.
|
|
|
| Back to top |
|
 |
Christophe Lephay Guest
|
Posted: Sun Jul 20, 2003 8:33 am Post subject: Re: float -> CString |
|
|
| Quote: | Je cherche, en Visual C++ 6, à écrire le contenu d'un float dans un
CEdit.
Après quelques recherches dans la MSDN j'ai trouvé la fonction _fcvt qui
renvoie en fait un char* mais sans le "." ou "," donc ce n'est pas très
utile
en utilisant le char * t'auras:
float F;
char S[256];
.......................
sprintf(S, "%f", F);
|
Sinon, le mieux reste encore les stringstreams :
double d = 3.14;
ostringstream ost( d );
CString leopard = ost.str().c_str();
Chris
|
|
| Back to top |
|
 |
kanze@gabi-soft.fr Guest
|
Posted: Mon Jul 21, 2003 10:36 am Post subject: Re: float -> CString |
|
|
"smj92I" <smjbari (AT) wanadoo (DOT) fr> wrote
| Quote: | en utilisant le char * t'auras:
float F;
char S[256];
.......................
sprintf(S, "%f", F);
|
Ce qui donne un core dump chez moi, au moins pour certaines valeurs de F
(1e300, par exemple).
À quelques rares exceptions près, il n'existe pas de programme correct
avec sprintf.
En C++, évidemment, on a l'alternatif :
std::string
cvtFlt( float f )
{
std::ostringstream s ;
s << std::fix << f ;
return s.str() ;
}
En C, on a snprintf ; je crois que la plupart des compilateurs C++
l'offrent aussi.
--
James Kanze GABI Software mailto:kanze (AT) gabi-soft (DOT) fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
|
|
| Back to top |
|
 |
kanze@gabi-soft.fr Guest
|
Posted: Mon Jul 21, 2003 11:02 am Post subject: Re: float -> CString |
|
|
"Christophe Lephay" <christophe-lephay (AT) wanadoo (DOT) fr> wrote
| Quote: | Je cherche, en Visual C++ 6, à écrire le contenu d'un float dans
un CEdit. Après quelques recherches dans la MSDN j'ai trouvé la
fonction _fcvt qui renvoie en fait un char* mais sans le "." ou
"," donc ce n'est pas très utile
en utilisant le char * t'auras:
float F;
char S[256];
.......................
sprintf(S, "%f", F);
Sinon, le mieux reste encore les stringstreams :
double d = 3.14;
ostringstream ost( d );
CString leopard = ost.str().c_str();
|
Ce qui est parfaitement légal avec certaines implémentations (mais pas
avec d'autres), mais qui ne fait peut-être pas tout à fait ce que tu
penses. Question : quel est le constructeur de ostringstream qui va être
appelé ?
Voyons : on a une solution qui génère des core dumps, et une deuxième
qui génère une chaîne vide, quand il compile. D'autres suggestions ?
Je propose plusieurs solutions :
CString
cvtFlt( float f )
{
std::ostringstream tmp ;
tmp << GB_FixFmt( 6, 2 ) << f ;
return tmp.str().c_str() ;
}
(Avec le GB_FixFmt à www.gabi-soft.fr.)
CString
cvtFlt( float f )
{
return GB_Format( "%6.2" ).with( f ).asString().c_str() ;
}
(Avec le GB_Format à www.gabi-soft.fr.)
CString
cvtFlt( float f )
{
return (boost::format( "%6.2" ) % f).str().c_str() ;
}
(Avec le boost::format, à www.boost.org.)
CString
cvtFlt( float f )
{
std::ostringstream tmp ;
tmp << std::fix << std::setprecision( 2 ) << std::setw( 6 ) << f ;
return tmp.str().c_str() ;
}
(Rien que du C++ standard.)
CString
cvtFlt( float f )
{
int l = snprintf( NULL, 0, "6.2f", f ) ;
char* tmp = malloc( l + 1 ) ;
if ( tmp == NULL ) {
// pas assez de mémoire ...
}
snprintf( tmp, l + 1, "6.2f", f ) ;
CString result = tmp ;
free( tmp ) ;
return result ;
}
(Rien que du C standard.)
--
James Kanze GABI Software mailto:kanze (AT) gabi-soft (DOT) fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|