Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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
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