Reputation: 32073
I'm currently using the following methodology to turn a NSString
number (like @"123.456"
) into a NSDecimalNumber
after rounding (like 123.46
), but it feels hacky. Is there a more intended solution?
+ (NSDecimalNumber*)decimalNumberForString:(NSString*)str accuracy:(NSUInteger)accuracy
{
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.numberStyle = NSNumberFormatterNoStyle;
formatter.maximumFractionDigits = accuracy;
formatter.roundingMode = NSNumberFormatterRoundHalfUp;
NSNumber *numberVersion = [formatter numberFromString:str];
return [[NSDecimalNumber alloc] initWithDecimal:numberVersion.decimalValue];
}
Upvotes: 1
Views: 94
Reputation: 9040
Take a look at NSDecimalNumberHandler and NSDecimalNumber's
-decimalNumberByRoundingAccordingToBehavior:
method.
You can create a NSDecimalNumber with your unedited string, then create a new NSDecimal number that's rounded according to the rules you set on NSDecimalNumberHandler.
There's no need to edit your input string.
Upvotes: 1
Reputation: 122381
Use [NSDecimalNumber decimalNumberWithString:]
, like this:
NSDecimalNumber *number = [NSDecimalNumber decimalNumberWithString:@"123.456"];
The number of decimal places only affects the string representation of the number; once the number is stored in an NSDecimalNumber
object it can be formatted back to a string in any way you desire.
Upvotes: 1