2011-03-04 28 views
12

Estoy desarrollando la aplicación Window Phone 7 en Silverlight. Soy nuevo en la aplicación de teléfono de ventana 7. Tengo el valor de largo en formato de cadena de la siguiente maneraCómo convertir long a int en .net?

String Am = AmountTextBox.Text.ToString() 

El AmountTextBox.Text.ToString() en el código anterior es el valor a largo que está en formato de cadena. Quiero almacenar un valor inter de 15 dígitos en mi aplicación.

Encontré el siguiente enlace para la conversión.

Can I convert long to int?

¿Cómo debería convertir un valor de largo que se encuentra en formato de cadena a int? ¿Me puede dar algún código o vínculo a través del cual pueda resolver el problema anterior? Si estoy haciendo algo mal, por favor guíame.

+3

Un 'Int32' no tiene solamente 10 dígitos (' 2,147,483,647', sin signo '4,294,967,295'), ¿dónde desea almacenar los otros 5? – Bobby

+0

Uso XML como base de datos en mi aplicación. Estoy utilizando el nodo para almacenar el valor completo de 15 dígitos. Entonces, ¿debo encubrir mi valor String en el largo? Por favor guíame. Soy nuevo en este tipo de conversiones –

+0

Entonces, ¿voy a adivinar que realmente quiere convertir un 'String' que contiene un número en' long'? –

Respuesta

7

No puede almacenar un número entero de 15 dígitos, ya que el valor máximo para un número entero es 2.147.483.647.

¿Qué pasa con un long -Valor?

Se podría utilizar para obtener el TryParse()long-el valor de la entrada del usuario yout:

String Am = AmountTextBox.Text.ToString(); 
long l; 
Int64.TryParse(Am, out l); 

Se volverá false si el texto no se puede convertir en long, así que es bastante seguro de usar.

De lo contrario, la conversión de un long a int es un fácil como

int i = (int)yourLongValue; 

si su feliz con descartando MSB y LSB tomar.

0

El valor máximo Int32 en C# es 2.147.483.647, más corto que los 15 dígitos que necesita.

¿Estás seguro de que necesitas convertir este valor a un int? Parece que sería mejor guardar el valor en un long, o dejarlo como String.

+0

Sí, tiene razón. Creo que debería convertir mi valor de cadena en long. Como hacer esto ? ¿Me puede dar algún código? –

+1

La respuesta de Cody Gray es bonita si quieres código. – GavinH

0

Un valor largo almacena más datos que un valor entero 32, por lo que si desea conservar los 15 dígitos no puede convertir a un número entero estándar.

Pero aparte de 'que' tipo de datos que desea utilizar, la clase Convert debería ayudarle a decir Convert.ToInt64 que puede hacer lo que quiera

18

Uso Convert.ToInt32(). Si el valor es demasiado grande para una int, arrojará una OverflowException.

Este método puede tomar una amplia gama de valores, incluidos Int64 y Strings.

1

Tiene un número almacenado como string y desea convertirlo a un tipo numérico.

No se puede convertir al tipo int (también conocido como Int32), porque como las otras respuestas han mencionado, ese tipo no tiene suficiente rango para almacenar el valor deseado.

En su lugar, debe convertir el valor a long (también conocido como Int64). La forma más sencilla e indolora de hacerlo es utilizando el TryParse method, que convierte una representación de cadena de un número en su entero con signo de 64 bits.

La ventaja de utilizar este método (en lugar de algo como Parse) es que no genera una excepción si la conversión falla. Como las excepciones son caras, debe evitar tirarlas a menos que sea absolutamente necesario. En su lugar, especifique la cadena que contiene el número para convertir como primer argumento al método, y un valor out para recibir el número convertido si la conversión tiene éxito. El valor de retorno es un booleano, que indica si la conversión fue exitosa o no.

Código de ejemplo:

private void ConvertNumber(string value) 
{ 
    Int64 number; // receives the converted numeric value, if conversion succeeds 

    bool result = Int64.TryParse(value, out number); 
    if (result) 
    { 
     // The return value was True, so the conversion was successful 
     Console.WriteLine("Converted '{0}' to {1}.", value, number); 
    } 
    else 
    { 
     // Make sure the string object is not null, for display purposes 
     if (value == null) 
     { 
      value = String.Empty; 
     } 

     // The return value was False, so the conversion failed 
     Console.WriteLine("Attempted conversion of '{0}' failed.", value); 
    } 
} 
0

En C# int tiene 32 bits y long tiene 64 bits. Por lo tanto, todos los valores de long no pueden ser int. Tal vez obtener una matriz de int s?

public static int[] ToIntArray(long l) 
{ 
    var longBytes = BitConverter.GetBytes(l); 

    // Get integers from the first and the last 4 bytes of long 
    return new int[] { 
     BitConverter.ToInt32(longBytes, 0), 
     BitConverter.ToInt32(longBytes, 4) 
    }; 
}