¿Cómo puedo formatear un número en una cadena con ceros a la izquierda?

Respuestas:

344

Bastante simple:

Key = i.ToString("D2");

Dsignifica "número decimal", 2el número de dígitos para imprimir.

Mario
fuente
77
si lo string.Format("D2", value)usas obtendrás D2la salida. Esto no funciona. Debemos usar "{0:00}"en este caso.
v.oddou
42
Deberías usar string.Format("{0:D2}", value)en su lugar. Solo decir string.Format("D2", ...)que no reemplazará nada, pase lo que pase, ya que no tiene un marcador de posición.
infinitypanda
55
@infinitypanda se da cuenta de que esto solo funcionará cuando valuees un int. Si valuees un doble, por ejemplo, tendrá que serstring.Format("{0:00}", value)
derekantrican
si estamos hablando de 'dígitos iniciales', creo que la respuesta sería i.ToString ("00"); donde "00" representa los ceros iniciales ... puede aumentar esta cantidad tanto como sea posible.
Dedan
198

Consulte el formato de cadenas en C # para ver algunos ejemplos de usos de String.

En realidad, un mejor ejemplo de formateo int

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

o use la interpolación de cadenas :

$"{15:00000}";                           // "00015"
Pablo
fuente
2
Tenga en cuenta que String.Format ("{0: 00000}", "15"); devuelve "15", es decir, no funciona en una cadena.
Paul McCarthy
72

Si desea mantener el ancho fijo, por ejemplo 10 dígitos, hágalo así

Key = i.ToString("0000000000");

Reemplace con tantos dígitos como desee.

i = 123entonces resultará en Key = "0000000123".

Øyvind Bråthen
fuente
63

Como nadie ha mencionado esto aún, si está utilizando C # versión 6 o superior (es decir, Visual Studio 2015), puede usar la interpolación de cadenas para simplificar su código. Entonces, en lugar de usar string.Format(...), puedes hacer esto:

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

utilizar:

i.ToString("D10")

Consulte Int32.ToString (MSDN) y cadenas de formato numérico estándar. (MSDN).

O usar String.PadLeft. Por ejemplo,

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

Daría como resultado 0000000321. AunqueString.PadLeft no funcionaría para números negativos.

Ver String.PadLeft (MSDN).

firefox1986
fuente
44
Supongo que eso te fastidiará una vez que intentes usarlo con números negativos.
Mario
Gracias. Usé el segundo. Dejé el ".ToString ()", todavía funciona.
Sunsetquest
14

Por lo general, String.Format ("formato", objeto) es preferible a object.ToString ("formato"). Por lo tanto,

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

es preferible a

Key = i.ToString("000000");
Deducción de la cámara
fuente
44
Sí, como preguntó @cja, ¿por qué es preferible? Y no estoy discutiendo en contra de la afirmación, me gustaría saber por qué.
Christopher King
La primera sintaxis "se siente" más precisa, predecible y clara. Y sería mejor decirlo como Key = String.Format ("{0: 00000}", 15); que se compara con Key = i.ToString ("000000"); Con la primera sintaxis, estoy bastante seguro de que sé exactamente el resultado que obtendré, y si por casualidad estoy un carácter apagado, sé exactamente qué cambiar (cadena de formato. Entonces, en resumen, para mí es preferible preferencia personal emocional, débilmente apoyada por una media razón casi plausible ;-) Entonces, ¿se decide entonces?
Desarrollador63
13

Tratar:

Key = i.ToString("000000");

Sin embargo, personalmente vería si no puede ordenar el número entero directamente, en lugar de la representación de cadena.

Marc Gravell
fuente
7

Para cadenas interpoladas:

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

Aquí quiero que mi no se limite en 4 dígitos, como si fuera 1, debería aparecer como 0001, si es 11, debería aparecer como 0011 ... A continuación se muestra el código.

        reciptno=1;//Pass only integer.

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

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

Implementé este código para generar el recibo de dinero no.

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

Salida = "00001"

EDITAR: cambiado para coincidir con la cantidad de PadLeft

Gayan Chinthaka Dharmarathna
fuente