2012-06-07 230 views
11

Necesito hacer una variable de contador de 40 dígitos. Se debe comenzar tan 0000000000000000000000000000000000000001
y el incremento de
0000000000000000000000000000000000000002C# - incrementar el número y mantener los ceros al frente

Cuando uso la clase int, corta todos los ceros. El problema es que necesito incrementar el número y luego convertirlo a una cadena, con el número correcto de ceros a la izquierda. El tamaño total debe ser de 40 dígitos. Así que si golpeo 50, por ejemplo, debería tener este aspecto:

0000000000000000000000000000000000000050

¿Cómo puedo hacer eso y conservar los ceros?

+1

Vas a necesitar usar algo más como [BigInteger] (http://msdn.microsoft.com/en -us/library/system.numerics.biginteger.aspx) en lugar de 'int'; de lo contrario, el incremento fallará en poco tiempo. – HABO

Respuesta

26

Usa el número entero y formatea o rellena el resultado cuando conviertas a una cadena. Tal como

int i = 1; 
string s = i.ToString().PadLeft(40, '0'); 

Ver Jeppe Stig Nielson's answer de una opción de formato que puedo recordar también que nunca.

+1

los argumentos están en orden opuesto ... – Tigran

+0

Han corregido, y gracias. –

+0

@RhysW, no, simplemente rellena la longitud que especifique con el carácter también especificado. No excederá esa longitud. Por ejemplo, "123" .PadLeft (2, '0') simplemente devolverá "123" –

19

Intente utilizar

int myNumber = ...; 
string output = myNumber.ToString("D40"); 

Por supuesto, el int nunca puede crecer tan grande como para llenar todas las posiciones de los dígitos (el mayor int que tiene solamente 10 dígitos).

1

Sólo convertir la cadena a int, lleve a cabo la adición o cualquier otra operación, a continuación, convertir de nuevo a cadena con un número adecuado de 0 inicial de:

// 39 zero's + "1" 
string initValue = new String('0', 39) + "1"; 

// convert to int and add 1 
int newValue = Int32.Parse(initValue) + 1; 

// convert back to string with leading zero's 
string newValueString = newValue.ToString().PadLeft(40, '0'); 
0

que tenía que hacer algo similar, el otro día, pero solo necesitó dos ceros. Terminé con

string str = String.Format("{0:00}", myInt); 

No está seguro de si se trata de engañar a la prueba, pero trate

String.Format("{0:0000000000000000000000000000000000000000}", myInt) 
Cuestiones relacionadas