Converting Double to NSNumber in Swift Loses Accuracy [duplicate] Converting Double to NSNumber in Swift Loses Accuracy [duplicate] swift swift

Converting Double to NSNumber in Swift Loses Accuracy [duplicate]


Firstly, you're confusing some terms. 79.98999999999999 is higher precision than 79.99 (it has a longer decimal expansion), but lower accuracy (it deviates from the true value).

Secondly, NSNumber does not store neither 79.99 nor 79.98999999999999. It stores the magnitude of the value according to the IEEE 754 standard. What you're seeing is likely the consequence of the printing logic that's applied to convert that magnitude into a human readable number. In any case, you should not be relying on Float or Double to store values with a fixed precision. By their very nature, they sacrifice precision in order to gain a longer range of representable values.

You would be much better off representing prices as an Int of cents, or as an NSDecimalNumber.

Please refer to Why not use Double or Float to represent currency?


That's how double works everywhere. If you need only 2 decimal places consider using integer/long instead adding point after second digit, when need to display the value.