Почему longLongValue возвращает неправильное значение

У меня есть NSDictionary, который содержит ключ со значением 4937446359977427944. Я пытаюсь получить его значение как long long и получить обратно 4937446359977427968?

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

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

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

Выполнение:

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

Я предполагаю, что это какая-то проблема округления, поскольку кажется, что младшие биты очищены, я просто не знаю, как это остановить (или почему это происходит).

Словарь создается с использованиемNSJSONSerialization и объект JSON (правильно) содержит"MyKey": 4937446359977427944 запись иdict объект правильный.

Значение, удерживаемое вNSDictionary этоNSDecimalNumber

За кулисами что-то конвертируется?

Ответы на вопрос(3)

Ваш ответ на вопрос