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
Respuesta
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));
+1 para explicar ambas opciones, porque la mejor solución depende de la naturaleza de los datos (imo) – Thorarin
¿No es 'number.ToString(). PadLeft (numberOfDigits, '0')' más fácil? Al menos, es más fácil de leer, diría ... :) – Svish
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
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
+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
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");
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.
Esto también debería funcionar.
123.ToString().PadLeft(5, '0'); // 0
Como comentó sobre el comentario de Svish, esto crearía resultados extraños con enteros negativos. – Codesleuth
- 1. Formato decimal C# - Mantener el último cero
- 2. Int32.Parse() VS Convert.ToInt32()?
- 3. Convert.ToInt32 versus TryParse
- 4. Precedente del operador de Python
- 5. mejor uso int.Parse o Convert.ToInt32
- 6. Convert.ToInt32() una cadena con Comas
- 7. ¿Por qué existe Convert.ToInt32 (DateTime)?
- 8. ¿Por qué usar Convert.ToInt32 sobre el casting?
- 9. Precedente real para operadores de infijo en Scala
- 10. ¿Cómo busco "\ n" sin un precedente "\ r" en vim?
- 11. ¿Cuál es la principal diferencia entre Convert.ChangeType o Convert.ToInt32?
- 12. C# ¿Por qué este retorno 49: Convert.ToInt32 ('1')
- 13. devuelve cero
- 14. Extender el compilador de Mono C#: ¿hay alguna documentación o precedente?
- 15. ¿Cómo reemplazar cada 0 con el elemento precedente en una lista de manera idiomática en Mathematica?
- 16. UIScrollView y CATiledLayer desde cero
- 17. Mejor expresión de ruby para "cero o cero"
- 18. Es menos cero (-0) equivalente a cero (0) en C#
- 19. Clave externa que también puede ser cero
- 20. cero tamaño malloc
- 21. reimplementando NSObject desde cero
- 22. jstl cero negativo
- 23. WSAGetLastError devolviendo cero
- 24. 0E30 no es cero
- 25. BigDecimal multiplicar por cero
- 26. Tamaño cero struct
- 27. cero final en decimal
- 28. matrices de longitud cero
- 29. Dividir por cero prevención
- 30. Eliminar cero de HIGHCHART
Si quiere un cero a la izquierda, seguramente no quiere convertir a Int32? ¿Por qué no mantenerlo como una cadena? –
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 –
@Matt porque el tipo de base de datos es un Int – Grace