A float has 7.22 decimal digits of precision. A double has 15.95 decimal digits of precision.
http://en.wikipedia.org/wiki/IEEE_floating_point The format specification Apple uses for [NSNumber descriptionWithLocale:] with a data type of double is %0.16g. Refer to Apple documentation. [NSNumberFormatter localizedStringFromNumber:numberStyle:] is most likely doing something similar to %0.16g internally. The extra precision added by using a format specification %.22g is meaningless for an IEEE double. Richard Charles On Oct 11, 2014, at 2:04 AM, Gerriet M. Denkmann <gerr...@mdenkmann.de> wrote: > > UInt64 sum = 16494631536958187520UL; > double doubleSum = sum; > NSString *strSum = [ NSNumberFormatter localizedStringFromNumber: > @(doubleSum) > > numberStyle: NSNumberFormatterDecimalStyle > ]; > NSLog(@"%s DecimalStyle (of double): %@; UInt64: %llu, double: > %.22g",__FUNCTION__, strSum, sum, doubleSum ); > > This prints: > DecimalStyle (of double): 16,494,631,536,958,200,000; UInt64: > 16494631536958187520, double: 16494631536958187520 > > Note: converting to double does NOT loose any digits. But NSNumberFormatter > does. Why? > > I also tried: > NSNumberFormatter *nf = [ [ NSNumberFormatter alloc ] init ]; > [ nf setNumberStyle: NSNumberFormatterDecimalStyle ]; > [ nf setUsesSignificantDigits: YES ]; > [ nf setMaximumSignificantDigits: 22 ]; > NSString *str2Sum = [ nf stringFromNumber: @(doubleSum) ]; > But the result is the same. > > Gerriet. _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com