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.


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


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


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}";

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


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");

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.


7

Pour les chaînes interpolées:

$"Int value: {someInt:D4} or {someInt:0000}. Float: {someFloat: 00.00}"

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.


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.