title: Why is longLongValue returning the incorrect value
body: <p>I have a NSDictionary that contains a key with a value of 4937446359977427944.  I try and get the value of it as a long long and get 4937446359977427968 back?</p>
  
  <pre><code>NSLog(@"value1 = %@", [dict objectForKey"MyKey"]); // prints 4937446359977427944 
  
  long long lv = [dict objectForKey:@"MyKey"] longLongValue];
  
  NSLog(@"value2 = %lld", lv); // prints 4937446359977427968
  </code></pre>
  
  <p>Doing:</p>
  
  <pre><code>NSLog(@"%lld", [@"4937446359977427944" longLongValue]); // prints 4937446359977427944
  </code></pre>
  
  <p>I'm assuming it is some kind of round off issue since the lower bits seems to be cleared, I just don't know how to stop it (or why it's happening).</p>
  
  <p>The dictionary is being created using <code>NSJSONSerialization</code> and the JSON object does (correctly) contain a <code>"MyKey": 4937446359977427944</code> entry and the <code>dict</code> object is correct.</p>
  
  <p>The value being held in the <code>NSDictionary</code> is a <code>NSDecimalNumber</code></p>
  
  <p>Is something being convert to a float behind the scenes?  </p>