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?