Como formatar um número em uma string com zeros à esquerda?

246

Eu tenho um número que eu preciso converter em uma string. Primeiro eu usei isso:

Key = i.ToString();

Mas eu sei que ele está sendo classificado em uma ordem estranha e, portanto, preciso preenchê-lo com zeros. Como eu pude fazer isso?

Mandy Weston
fonte

Respostas:

344

Bastante simples:

Key = i.ToString("D2");

Dsignifica "número decimal", 2o número de dígitos a serem impressos.

Mario
fonte
7
se você usar, string.Format("D2", value)obterá D2a saída. isso não funciona. Devemos usar "{0:00}"neste caso.
precisa saber é o seguinte
42
Você deve usar em seu string.Format("{0:D2}", value)lugar. Apenas dizer string.Format("D2", ...)não substituirá nada, não importa, pois você não tem um espaço reservado.
Infinitypanda #
5
@infinitypanda percebe que isso só funcionará quando valuefor um int. Se valuefor um duplo, por exemplo, terá que serstring.Format("{0:00}", value)
derekantrican 23/02
se estamos falando de 'dígitos iniciais', acho que a resposta seria i.ToString ("00"); onde "00" representa os zeros à esquerda. você pode aumentar esse valor o máximo possível.
Dadã
198

Consulte Formatação de string em C # para obter alguns exemplos de usos de String.Format

Na verdade, um exemplo melhor de formatação int

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

ou use Interpolação de String :

$"{15:00000}";                           // "00015"
Paulo
fonte
2
Observe que String.Format ("{0: 00000}", "15"); retorna "15", ou seja, não funciona em uma string.
Paul McCarthy
72

Se você deseja mantê-lo com largura fixa, por exemplo, 10 dígitos, faça assim

Key = i.ToString("0000000000");

Substitua por quantos dígitos desejar.

i = 123resultará em Key = "0000000123".

Øyvind Bråthen
fonte
63

Como ninguém ainda mencionou isso, se você estiver usando o C # versão 6 ou superior (ou seja, Visual Studio 2015), poderá usar a interpolação de strings para simplificar seu código. Então, em vez de usar string.Format(...), você pode fazer isso:

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

usar:

i.ToString("D10")

Consulte Int32.ToString (MSDN) e seqüências de formato numérico padrão (MSDN).

Ou use String.PadLeft. Por exemplo,

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

Resultaria em 0000000321. ApesarString.PadLeft não funcionaria para números negativos.

Consulte String.PadLeft (MSDN).

firefox1986
fonte
4
Eu acho que isso vai te ferrar quando você tentar usá-lo com números negativos.
Mario
Obrigado - eu usei o segundo. Eu deixei de fora o ".ToString ()" - ainda funciona.
Sunsetquest
14

Normalmente, String.Format ("formato", objeto) é preferível a object.ToString ("formato"). Portanto,

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

é preferível

Key = i.ToString("000000");
Chameera Dedduwage
fonte
4
Sim, como @cja perguntou, por que é preferível? E não estou argumentando contra a afirmação, gostaria de saber o porquê.
Christopher King
A primeira sintaxe "parece" mais precisa, previsível e clara. E seria melhor declarado como Key = String.Format ("{0: 00000}", 15); isso está sendo comparado a Key = i.ToString ("000000"); Com a primeira sintaxe, tenho certeza de que sei exatamente o resultado que vou obter e, se por acaso eu estiver com um caractere, sei exatamente o que mudar (formatar string. Então, resumindo, para mim, é preferível preferência pessoal emocional, fracamente apoiada por uma meia razão quase plausível ;-) Então está decidido?
Developer63
13

Experimentar:

Key = i.ToString("000000");

Pessoalmente, porém, eu veria se você não pode classificar o número inteiro diretamente, em vez da representação de string.

Marc Gravell
fonte
7

Para seqüências de caracteres interpoladas:

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

Aqui eu quero que o meu não limite em 4 dígitos, como se fosse 1, deveria aparecer como 0001, se 11, deveria aparecer como 0011 ... Abaixo estão os códigos.

        reciptno=1;//Pass only integer.

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

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

Eu implementei esse código para gerar o recibo no.

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

Saída = "00001"

EDIT: Alterado para corresponder ao valor PadLeft

Gayan Chinthaka Dharmarathna
fonte