Dlaczego longLongValue zwraca niepoprawną wartość

Mam NSDictionary, który zawiera klucz o wartości 4937446359977427944. Próbuję uzyskać wartość tego długiego i uzyskać 4937446359977427968 z powrotem?

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

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

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

Robić:

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

Zakładam, że jest to jakaś kwestia zaokrąglenia, ponieważ niższe bity wydają się być usunięte, po prostu nie wiem, jak to zatrzymać (lub dlaczego tak się dzieje).

Słownik jest tworzony przy użyciuNSJSONSerialization a obiekt JSON zawiera (poprawnie)"MyKey": 4937446359977427944 wpis idict obiekt jest poprawny.

Wartość utrzymywana wNSDictionary jestNSDecimalNumber

Czy coś się zmienia w pływaka za kulisami?

questionAnswers(3)

yourAnswerToTheQuestion