Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[debutant] formatage flux

1 réponse
Avatar
pasde.bcausse.spam
bonjour,

je souhaite formater un nombre avec un nombre de digits fixe des zeros
en tete completent le nombre si necessaire.

ex 1234, en 8 digits donne 00001234

avec with(8) et fill('0') ca fonctionnent, mais n'y a t'il pas plus
simple (j'ai plusieurs nombres a formater)?

--
Bruno Causse
http://perso.wanadoo.fr/othello

1 réponse

Avatar
kanze
Bruno Causse wrote:

je souhaite formater un nombre avec un nombre de digits fixe
des zeros en tete completent le nombre si necessaire.

ex 1234, en 8 digits donne 00001234

avec with(8) et fill('0') ca fonctionnent, mais n'y a t'il pas
plus simple (j'ai plusieurs nombres a formater)?


Je suppose que ce désir est couplé au fait que les numéros en
question ont une sémantique particulière ; qu'ils sont tous des
toto, ou quelque chose du genre. Dans ce cas-là, il existe deux
solutions :

-- Écrire un manipulateur pour formatter des toto. Ensuite, tu
dis au flux à chaque fois qu'il s'agit d'un toto :
std::cout << toto << monNumero ;
C'est dans le manipulateur que tu positionnes le fill.

-- Définir une classe Toto, qui a le comportement précise que
tu veux, et pour laquelle tu as défini un operator<<.
Opérateur qui se base sur l'opérateur << pour int, et qui
positionne fill etc. comme il faut. (N'oublie pas d'en
restaurer les valeurs précédantes avant de sortir de ton
opérateur <<.)

Laquelle des deux solutions convient le plus dépend de
l'application. Si le type en question n'est vraiement qu'une
valeur numérique, qui peut se mélanger avec n'importe quelle
autre valeur numérique dans des expressions, la première
solution s'impose. (On peut considérer le manipulateur personel
comme une balise logique, tandis que les manipulateurs de base
dans la norme sont des balises physiques.)

Dès qu'il a quelque chose en plus, qu'on ne pas en multiplier
deux, par exemple, où que les ajouter avec une valeur numérique
arbitraire n'a pas de sens, la solution avec la classe s'impose.

--
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