Почему 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
За кулисами что-то конвертируется?