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


Respostas:


344

Bastante simples:

Key = i.ToString("D2");

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


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ã


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


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

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


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

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.


7

Para seqüências de caracteres interpoladas:

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

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.


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.