2009-12-01 25 views
42

Tengo una cadena que a veces tiene comas separando el número como 1,500 y necesito convertir esto a un Int, actualmente está lanzando una excepción, ¿alguien me puede decir cómo solucionar este problema? de modo que a veces puedo ingresar números con comas y otras veces sin comas y aún se convertirán.Convert.ToInt32() una cadena con Comas

+0

¿No le gustaría convertir esto a dos? Use String.Split(). –

+1

Eliminar las comas antes de la conversión. –

+0

tengo el mismo problema @ big-z. He eliminado las comas: bool totalPriceConversionResult = decimal.TryParse (txtTotalPrice.Text.Replace (",", ""), out totalPrice) y convertirlo a: TotalPrice = totalPriceConversionResult? Convert.ToInt32 (totalPrice): 0. pero me da un valor de 0 vaue. http://stackoverflow.com/questions/37359906 –

Respuesta

111

Usted podría utilizar int.Parse y añadir la NumberStyles.AllowThousands bandera:

int num = int.Parse(toParse, NumberStyles.AllowThousands); 

O int.TryParse que le permite saber si la operación tuvo éxito:

int num; 
if (int.TryParse(toParse, NumberStyles.AllowThousands, 
       CultureInfo.InvariantCulture, out num)) 
{ 
    // parse successful, use 'num' 
} 
+3

Estás bromeando, .Net puede hacer eso? ¡Bonito! – Will

+0

Bien, gracias. –

+0

¡Me encanta la bandera! Simplemente dése cuenta de su existencia ... gracias @CMS – nonintanon

2

Puede hacer replace(';', '') antes de convertirlo a int.

+0

Gracias, no sabía que era tan simple en C# ... pensé que tenía que hacer RegEx para reemplazarlos. –

2

Si no tiene que preocuparse por las reglas de varios países (por ejemplo, algunos utilizan una coma como posición decimal en lugar de separador de miles), simplemente elimine primero las comas.

por ejemplo

string nastyNumber = "1,234"; 
int result = int.Parse(nastyNumber.Replace(",", "")); 

(sustituir int con doble punto si es necesario flotante)

6

Puede usar Decimal.Parse() y luego emitir el resultado a int. Esto también funciona con la cultura actual, o puede especificar un CultureInfo para usar. No es necesario manejar manualmente comas, puntos decimales, etc., todo está integrado en .NET.

0

puede reemplazar la comas con String.Empty antes de llamar Convert.ToInt32(), o se puede ver en el uso Int32.Parse() o Int32.TryParse() con NumberStyles.AllowThousands como uno de los parámetros.

Int32.Parse

Int32.TryParse

2

¿Qué pasa con las sugerencias de fuerza bruta de la eliminación de comas ?? ¿Qué pasa si la cadena es algo así como "1,1,1"? ¿Es este un número válido? Eliminar comas lo convertiría en un número válido y haría la conversión semánticamente incorrecta.

Existe una razón por la que existen NumberStyles y el método Int.Parse() puede analizar con o sin relación con el estilo del número.

+2

'int.Parse (" 1,1,1 ", NumberStyles.AllowThousands);' returns '111', por lo que .NET cree que es un número válido. – nunzabar

0

Usted puede utilizar el código

int num = Strings.Replace(str, ",", string.Empty); 

Esto reemplaza todas las ocurrencias de "" con "" (cadena vacía). Entonces 1,000,000 vueltas 1000000

Cuestiones relacionadas