Use NSDecimalNumber
for greater precision. See NSRoundingMode
for the different rounding modes (I think you want NSRoundPlain
)
NSDecimalNumberHandler *rounder = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundPlain scale:precision raiseOnExactness:NO raiseOnOverflow:NO raiseOnUnderflow:NO raiseOnDivideByZero:NO];
NSDecimalNumber *number;
NSDecimaNumber *rounded = [number decimalNumberByRoundingAccordingToBehavior:rounder];
See the docs for more info on the BOOL
parameters in the handler.
It might seem like a bit of an overkill for what you want but it ensures your numbers will rarely lose precision.
Change the scale
argument of the rounder
for more digits on the result (i.e. your precision
variable).