NSArray cambia el tipo de NSNumber

Quiero almacenar un NSNumber como doble en un NSArray. Entonces intenté eso:

NSArray *diamArray = [[NSArray alloc] initWithObjects: [NSNumber numberWithDouble:1.0], [NSNumber numberWithDouble:1.2], nil]; 

Y luego, le pido a Xcode que muestre el diamArray:

 NSLog(@"%@", diamArray); 

Y aqui esta el resultado:

 [8873:1153347] ( 1, "1.2" ) 

Entonces podemos ver que ambos numbers no se tratan de la misma manera. Es un problema para mí, ya que estos valores son utilizables a medida que cambian sus types. Especialmente, en el reloj de debugging de la matriz, puedo ver el número decimal (1.2) como "doble", pero el valor 1.0 se muestra como "nulo".

¿Cómo puedo obligar a la matriz a considerar 1.0 como un doble?

Puede ser confuso descifrar types de datos de NSLog, ya que está intentando mostrar información conveniente. En este caso, 1.0 es exactamente uno, por lo que está truncando ese valor para que parezca ser un Int. Casi me aseguraré de que si tuviera que sacar el artículo de la matriz y mostrar su objCType, encontraría que es un doble:

 NSLog("%@: %s", diamArray[0], [diamArray[0] objCType]); 

La otra cosa a considerar es que los valores se pueden emitir de NSNumber, por lo que incluso si almacena 1.0 como un valor integer, aún puede extraerlo como un doble:

 [diamArray[0] doubleValue] 

NSNumber es un clúster de class . No debe preocuparse acerca de cómo almacena la información, pero en su lugar, en su lugar, debe preocuparse sobre cómo recuperar esa información.

Para recuperar su doble , solo tiene que hacer:

 double myDouble = [dimArray[0] doubleValue]; 

pero también hay:

 [dimArray[0] intValue]; [dimArray[0] integerValue]; [dimArray[0] unsignedIntegerValue]; [dimArray[0] floatValue]; ... 

Gracias por su información y sugerencias.

Me integer de que está relacionado con la configuration regional. Mi configuration regional pnetworkingeterminada es fr_FR y luego intenté eso:

 NSNumberFormatter *f = [[NSNumberFormatter alloc] init]; f.numberStyle = NSNumberFormatterDecimalStyle; NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]; [f setLocale:usLocale]; NSArray *pasArray = [[NSArray alloc] initWithObjects: [f numberFromString:[[NSNumber numberWithDouble:1.0] stringValue]], [f numberFromString:[[NSNumber numberWithDouble:0.25] stringValue]], nil]; 

y funciona como se esperaba. Supongo que, debido a la diferencia local, el punto se malinterpreta. Pero creo que no es realmente limpio hacerlo.

Mi conclusión es que David Berry tiene razón: no tengo que preocuparme por la pantalla y prefiero pedir el formatting que necesito cuando lo necesito.

Gracias de nuevo para ayudarme a entender por qué no fue un problema.