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


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


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


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

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


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

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.


7

Para cadenas interpoladas:

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

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.


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.