Reputation: 8680
Let's say I have an NSNumber
object that holds a value 0.12345
. All I want is an NSNumber
object with a same value, but rounded to a specified number of significant digits, say 2, so value looks like this: 0.12
.
NSString
and back, which is what some of the answers suggestIs there an obvious way to do it that I am missing?
Upvotes: 3
Views: 676
Reputation: 7588
Another hacky way is:
int yourNum = 0.12345 * 100; yourNum now is 12.
float yourNumF = yourNum / 100.0;
Not a fan of this method myself but it fits your requirement. :D
Upvotes: -1
Reputation: 12988
It's pretty much impossible to do it and maintain all your constraints. NSNumber
has no rounding methods, so you're going to have to convert to something else. The obvious route is to convert to a double and multiply, round and divide, but you say you would prefer not to do that. So that leaves this route:
NSNumber *round(NSNumber *number, NSInteger places, NSRoundingMode mode) {
NSDecimal d = number.decimalValue;
NSDecimal rd;
NSDecimalRound(&rd, &d, places, mode);
return [NSDecimalNumber decimalNumberWithDecimal:rd];
}
Upvotes: 3