 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
vincent daanen Guest
|
Posted: Tue Jun 06, 2006 6:48 pm Post subject: format de sortie d'un stringstream |
|
|
Bonjour a tous,
j'utilise une std::stringstream pour formatter plein de donnees en
std::string.
Lorsque je formatte des float (ou des double) 'entiers' (par ex 1.0)
j'obtiens dans ma string 1 alors que je voudrais au moins 1. voir 1.0
Y'a t il un moyen de forcer std::stringstream a faire ca ou faut il
passer par le sprintf du C (avec une bidouille a la cle !)
merci
Vince |
|
| Back to top |
|
 |
vincent daanen Guest
|
Posted: Tue Jun 06, 2006 6:55 pm Post subject: Re: format de sortie d'un stringstream |
|
|
vincent daanen a écrit :
| Quote: | Bonjour a tous,
j'utilise une std::stringstream pour formatter plein de donnees en
std::string.
Lorsque je formatte des float (ou des double) 'entiers' (par ex 1.0)
j'obtiens dans ma string 1 alors que je voudrais au moins 1. voir 1.0
Y'a t il un moyen de forcer std::stringstream a faire ca ou faut il
passer par le sprintf du C (avec une bidouille a la cle !)
merci
Vince
je suis confus : j'aurais du chercher un peu plus ! |
la solution :
std::stringstream l_strStream;
std::fixed(l_strStream);
V |
|
| Back to top |
|
 |
vincent daanen Guest
|
Posted: Wed Jun 07, 2006 9:11 am Post subject: Re: format de sortie d'un stringstream |
|
|
merci pour toutes ces precisions !
V
kanze a écrit :
| Quote: | vincent daanen wrote:
vincent daanen a écrit :
j'utilise une std::stringstream pour formatter plein de
donnees en std::string.
Lorsque je formatte des float (ou des double) 'entiers' (par
ex 1.0) j'obtiens dans ma string 1 alors que je voudrais au
moins 1. voir 1.0
Y'a t il un moyen de forcer std::stringstream a faire ca ou
faut il passer par le sprintf du C (avec une bidouille a la
cle !)
je suis confus : j'aurais du chercher un peu plus !
la solution :
std::stringstream l_strStream;
std::fixed(l_strStream);
Oui et non.
D'abord, l'utilisation ci-dessus est pour le moins peu
habituelle. On écrira noralement plutôt :
l_strStream << std::fixed << laVariable.
Mais aussi, fixed fait bien plus que faire afficher le point. Il
fait que toute valeur sortira en format à virgule fixe (avec six
chiffres derrière le décimal, si tu ne précises pas autrement).
Donc, par exemple, une valeur comme 1.5e300 va générer 307
caractères, et une valeur comme 1.5e-10 apparaîtra comme
0.000000 -- fixed, en C++, correspond au format %f de printf
(tandis que le défaut, c'est l'équivalent de %g). Si la seule
modification voulue, c'est d'afficher le point :
l_strStream << std::showpoint << laVariable ;
fait l'affaire.
Mais tout dépend de ce que tu veux : tu peux aussi spécifier la
précision, au moyen de :
l_strStream << std::fixed << std::setprecision( 2 ) << laVariable ;
pour par exemple, n'avoir que deux chiffres (plutôt que six)
derrière le virgule. Ou utiliser std::setw(n) pour spécifier une
largeur minumum.
--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
|
|
|
| Back to top |
|
 |
kanze Guest
|
Posted: Wed Jun 07, 2006 9:11 am Post subject: Re: format de sortie d'un stringstream |
|
|
vincent daanen wrote:
| Quote: | vincent daanen a écrit :
j'utilise une std::stringstream pour formatter plein de
donnees en std::string.
Lorsque je formatte des float (ou des double) 'entiers' (par
ex 1.0) j'obtiens dans ma string 1 alors que je voudrais au
moins 1. voir 1.0
Y'a t il un moyen de forcer std::stringstream a faire ca ou
faut il passer par le sprintf du C (avec une bidouille a la
cle !)
je suis confus : j'aurais du chercher un peu plus !
la solution :
std::stringstream l_strStream;
std::fixed(l_strStream);
|
Oui et non.
D'abord, l'utilisation ci-dessus est pour le moins peu
habituelle. On écrira noralement plutôt :
l_strStream << std::fixed << laVariable.
Mais aussi, fixed fait bien plus que faire afficher le point. Il
fait que toute valeur sortira en format à virgule fixe (avec six
chiffres derrière le décimal, si tu ne précises pas autrement).
Donc, par exemple, une valeur comme 1.5e300 va générer 307
caractères, et une valeur comme 1.5e-10 apparaîtra comme
0.000000 -- fixed, en C++, correspond au format %f de printf
(tandis que le défaut, c'est l'équivalent de %g). Si la seule
modification voulue, c'est d'afficher le point :
l_strStream << std::showpoint << laVariable ;
fait l'affaire.
Mais tout dépend de ce que tu veux : tu peux aussi spécifier la
précision, au moyen de :
l_strStream << std::fixed << std::setprecision( 2 ) << laVariable ;
pour par exemple, n'avoir que deux chiffres (plutôt que six)
derrière le virgule. Ou utiliser std::setw(n) pour spécifier une
largeur minumum.
--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34 |
|
| 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
|
|