Warum gibt longLongValue den falschen Wert zurück?

Ich habe ein NSDictionary, das einen Schlüssel mit dem Wert 4937446359977427944 enthält. Ich versuche, den Wert als long long abzurufen, und erhalte 4937446359977427968 zurück.

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

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

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

Tun:

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

Ich gehe davon aus, dass es sich um eine Art Abrundungsproblem handelt, da die unteren Teile gelöscht zu sein scheinen. Ich weiß nur nicht, wie ich es stoppen soll (oder warum es passiert).

Das Wörterbuch wird mit erstelltNSJSONSerialization und das JSON-Objekt enthält (korrekt) a"MyKey": 4937446359977427944 Eintrag und diedict Objekt ist korrekt.

Der im gehaltene WertNSDictionary ist einNSDecimalNumber

Wird etwas hinter den Kulissen in einen Wagen verwandelt?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage