C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Re: float -> CString

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
Adrien Treccani
Guest





PostPosted: Sat Jul 19, 2003 3:54 pm    Post subject: Re: float -> CString Reply with quote



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





PostPosted: Sat Jul 19, 2003 6:25 pm    Post subject: Re: float -> CString Reply with quote



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





PostPosted: Sun Jul 20, 2003 7:23 am    Post subject: Re: float -> CString Reply with quote



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





PostPosted: Sun Jul 20, 2003 8:33 am    Post subject: Re: float -> CString Reply with quote

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





PostPosted: Mon Jul 21, 2003 10:36 am    Post subject: Re: float -> CString Reply with quote

"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





PostPosted: Mon Jul 21, 2003 11:02 am    Post subject: Re: float -> CString Reply with quote

"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
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
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


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.