¿Por qué longLongValue está devolviendo el valor incorrecto?

Tengo un NSDictionary que contiene una clave con un valor de 4937446359977427944. Intento obtener el valor de la misma como un valor largo y obtengo 4937446359977427968 de nuevo.

NSLog(@"value1 = %@", [dict objectForKey"MyKey"]); // prints 4937446359977427944 

long long lv = [dict objectForKey:@"MyKey"] longLongValue];

NSLog(@"value2 = %lld", lv); // prints 4937446359977427968

Obra:

NSLog(@"%lld", [@"4937446359977427944" longLongValue]); // prints 4937446359977427944

Supongo que es una especie de problema de redondeo, ya que los bits más bajos parecen estar limpios, simplemente no sé cómo detenerlo (o por qué está sucediendo).

El diccionario se está creando usandoNSJSONSerialization y el objeto JSON contiene (correctamente) un"MyKey": 4937446359977427944 entrada y ladict El objeto es correcto.

El valor que se mantiene en elNSDictionary es unNSDecimalNumber

¿Se está convirtiendo algo a un flotador detrás de escena?

Respuestas a la pregunta(3)

Su respuesta a la pregunta