Comment puis-je formater un nombre dans une chaîne avec des zéros en tête?

Réponses:

344

Assez simple:

Key = i.ToString("D2");

Dsignifie "nombre décimal", 2pour le nombre de chiffres à imprimer.

Mario
la source
7
si vous utilisez, string.Format("D2", value)vous obtiendrez D2la sortie. ça ne marche pas. Nous devons utiliser "{0:00}"dans ce cas.
v.oddou
42
Vous devriez utiliser à la string.Format("{0:D2}", value)place. Le simple fait de dire string.Format("D2", ...)ne remplacera rien quoi qu'il en soit puisque vous n'avez pas d'espace réservé.
infinitypanda
5
@infinitypanda se rend compte que cela ne fonctionnera que si valueest un int. Si valuec'est un double, par exemple, il devra êtrestring.Format("{0:00}", value)
derekantrican
si nous parlons de «premiers chiffres», je pense que la réponse serait i.ToString ("00"); où "00" représente les zéros non significatifs .. vous pouvez augmenter ce montant autant que possible.
Dedan
198

Voir Formatage de chaînes en C # pour des exemples d'utilisation de String.Format

En fait, un meilleur exemple de formatage int

String.Format("{0:00000}", 15);          // "00015"

ou utilisez l' interpolation de chaînes :

$"{15:00000}";                           // "00015"
Paul
la source
2
Notez que String.Format ("{0: 00000}", "15"); renvoie "15", c'est-à-dire qu'il ne fonctionne pas sur une chaîne.
Paul McCarthy
72

Si vous souhaitez conserver une largeur fixe, par exemple 10 chiffres, faites-le comme ceci

Key = i.ToString("0000000000");

Remplacez par autant de chiffres que vous le souhaitez.

i = 123se traduira alors par Key = "0000000123".

Øyvind Bråthen
la source
63

Puisque personne ne l'a encore mentionné, si vous utilisez C # version 6 ou supérieure (c'est-à-dire Visual Studio 2015), vous pouvez utiliser l' interpolation de chaînes pour simplifier votre code. Donc, au lieu d'utiliser string.Format(...), vous pouvez simplement faire ceci:

Key = $"{i:D2}";
DavidG
la source
33

utilisation:

i.ToString("D10")

Voir Int32.ToString (MSDN) et chaînes de format numérique standard (MSDN).

Ou utilisez String.PadLeft. Par exemple,

int i = 321;
Key = i.ToString().PadLeft(10, '0');

En résulterait 0000000321. Mais String.PadLeftne fonctionnerait pas pour des nombres négatifs.

Voir String.PadLeft (MSDN).

firefox1986
la source
4
Je suppose que cela vous gâchera une fois que vous aurez essayé de l'utiliser avec des nombres négatifs.
Mario
Merci - j'ai utilisé le deuxième. J'ai omis le ".ToString ()" - cela fonctionne toujours.
Sunsetquest
14

Généralement, String.Format ("format", object) est préférable à object.ToString ("format"). Par conséquent,

String.Format("{0:00000}", 15);  

est préférable à,

Key = i.ToString("000000");
Chameera Dedduwage
la source
4
Oui, comme l'a demandé @cja, pourquoi est-il préférable? Et je ne conteste pas cette affirmation, j'aimerais savoir pourquoi.
Christopher King
La première syntaxe "semble" plus précise, prévisible et claire. Et il serait mieux indiqué comme Key = String.Format ("{0: 00000}", 15); qui est comparé à Key = i.ToString ("000000"); Avec la première syntaxe, je suis pratiquement sûr de connaître exactement le résultat que j'obtiendrai, et si par hasard je suis à un caractère près, je sais exactement quoi changer (format de chaîne. Donc, en bref, pour moi, c'est préférable pour préférence personnelle émotionnelle, faiblement soutenue par une demi-raison presque plausible ;-) Alors c'est décidé alors?
Developer63
13

Essayer:

Key = i.ToString("000000");

Personnellement, cependant, je verrais si vous ne pouvez pas trier directement l'entier plutôt que la représentation de la chaîne.

Marc Gravell
la source
7

Pour les chaînes interpolées:

$"Int value: {someInt:D4} or {someInt:0000}. Float: {someFloat: 00.00}"
Alan Samet
la source
3

Ici, je veux que mon non limite à 4 chiffres comme s'il était 1, il devrait montrer que 0001, s'il 11, il devrait montrer que 0011.. Ci-dessous sont le code.

        reciptno=1;//Pass only integer.

        string formatted = string.Format("{0:0000}", reciptno);

        TxtRecNo.Text = formatted;//Output=0001..

J'ai implémenté ce code pour générer le reçu d'argent no.

saktiprasad swain
la source
1
int num=1;
string number=num.ToString().PadLeft(4, '0')

Sortie = "00001"

EDIT: modifié pour correspondre au montant PadLeft

Gayan Chinthaka Dharmarathna
la source