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];
}
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.