2012-09-29 4 views
5

Tengo una cadena numérica y he observado una discrepancia donde su intValue es muy diferente de su valor de cadena. El código de abajo:- [NSString intValue] devolviendo un valor completamente diferente a la cadena dice

NSString *string = [result objectForKey:@"id"]; 
NSLog(@"ID %@",string); 
NSLog(@"ID as integer %i",[string intValue]); 

da una salida:

"ID 100004378121454" 
"ID as integer 2147483647" 

La única suposición lógica que puedo hacer es que la cadena es demasiado larga para ser convertido a un int ... En cualquier caso Probé longLongValue y tal - para diferentes resultados, pero no el que debería ser.

+3

Tienes razón al estar llegando a los límites de la int de 32 bits allí, pero longlongValue debería funcionar. ¿Cuál es el resultado entonces? –

+0

intente utilizar unsigned int (u_int32 valor máximo 9,223,372,036,854,775,808) –

+0

¿Sabe que la 'cadena' es, de hecho, un NSString y no un NSNumber? Es posible que desee consultar la clase. –

Respuesta

14

Su número (100004378121454) es mayor el número de un int simple puede manejar, usted tiene que utilizar long long tipo en este caso (a no obtener su número trunca al valor máximo int32):

NSString *string = @"100004378121454"; 
NSLog(@"ID %@",string); 
NSLog(@"ID as long long %lli",[string longLongValue]); 

salida :

ID    100004378121454 
ID as long long 100004378121454 
+1

Gracias a todos los comentarios y a esta respuesta, me quedé desconcertado con respecto a las iniciales que se suponía que debía poner después del% para obtener una salida larga y adecuada ... aplausos – Genhain

Cuestiones relacionadas