2010-01-11 7 views
6

Tengo números almacenados en una base de datos, y algunos tienen un cero como primer dígito, ya que siempre deben tener un cierto número de dígitos. Tengo un cuadro de texto que tiene este número escrito en él, así que hago un Convert.ToInt32 (TextBox.Text), que elimina el cero inicial si tiene uno. ¿Alguien tiene alguna idea de cómo puedo mantener el cero o agregarlo al inicio después de la conversión?Convert.ToInt32 - Mantener precedente cero

+4

Si quiere un cero a la izquierda, seguramente no quiere convertir a Int32? ¿Por qué no mantenerlo como una cadena? –

+0

no creo que puedas quedármelos. pero puede formatear el int convertido para volver a mostrarlos: http://msdn.microsoft.com/en-us/library/dd260048.aspx –

+0

@Matt porque el tipo de base de datos es un Int – Grace

Respuesta

26

La única manera de mantener los ceros precedentes es no convertirlo a un número.

Un número no tiene ceros anteriores ya que solo contiene el valor, no la cadena de representación del valor.

Si desea convertirlo a un número y luego volver a convertirlo en una cadena, recreando los ceros precedentes, se puede utilizar un formato personalizado:

string formatted = number.ToString("00000"); 

o para un número dinámico de dígitos:

string formatted = number.ToString(new String('0', numberOfDigits)); 
+0

+1 para explicar ambas opciones, porque la mejor solución depende de la naturaleza de los datos (imo) – Thorarin

+2

¿No es 'number.ToString(). PadLeft (numberOfDigits, '0')' más fácil? Al menos, es más fácil de leer, diría ... :) – Svish

+2

Me preocupan los valores negativos cuando hago un relleno como este. Por ejemplo, su opción PadLeft se vería así: "00-9" en lugar de -009. – Codesleuth

9

Si necesita mantener un cero relleno, entonces mantenga el valor como una Cadena. Los enteros no pueden mantener información sobre ceros acolchados, ya que simplemente representan un número.

Si necesita validar el número ingresado, use Int32.TryParse o haga coincidir el valor con regular expression (como "^\d+$").

Editar: Además de Guffa's answer, puede utilizar "D" (MSDN) para dar formato a un número determinado de caracteres (con relleno de ceros, si es necesario):

string formatted = number.ToString("D5"); // 13 -> 00013 
+0

+1, para insinuar sobre el especificador de formato decimal ("D"). Dado que la pregunta especifica 'Convert.ToInt32()', este es mi método preferido para rellenar el valor. – Codesleuth

0

debe utilizar el formato de cadena para mantener el cero:

int fooValue = Convert.ToInt32(TextBox.Text) 
//operations with foo Value 
string formatValue = fooValue.ToString("#0000"); 
2

la forma Lo haría cuando el número se devuelva a la base de datos en lugar de alimentarlo int use string usando myint.ToString("0000000"). Con el número de 0 es la longitud total del número acolchado.

0

Esto también debería funcionar.

123.ToString().PadLeft(5, '0'); // 0
+0

Como comentó sobre el comentario de Svish, esto crearía resultados extraños con enteros negativos. – Codesleuth