Por que longLongValue está retornando o valor incorreto

Eu tenho um NSDictionary que contém uma chave com um valor de 4937446359977427944. Eu tento e obter o valor de como um longo e obter 4937446359977427968 de volta?

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

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

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

Fazendo:

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

Eu estou supondo que é algum tipo de round off questão desde os bits inferiores parece ser apagado, eu só não sei como pará-lo (ou por que isso está acontecendo).

O dicionário está sendo criado usandoNSJSONSerialization e o objeto JSON (corretamente) contém um"MyKey": 4937446359977427944 entrada e odict objeto está correto.

O valor que está sendo mantido noNSDictionary é umNSDecimalNumber

Algo está sendo convertido em um float nos bastidores?

questionAnswers(3)

yourAnswerToTheQuestion