iostrimnsnumberformatterdecimal

How to avoid rounding off in NSNumberFormatter


I am trying to have a number string with maximum 2 decimals precision, while rest decimals just trimmed off instead of rounding them up. For example:

I have: 123456.9964

I want: 123456.99 -> Just want to trim rest of the decimal places

What I have tried is:

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setNumberStyle: NSNumberFormatterDecimalStyle];
[numberFormatter setMaximumFractionDigits:2];
NSString *numberAsString = [numberFormatter stringFromNumber:[NSNumber numberWithFloat: 123456.9964]];
 NSLog(@"%@", numberAsString);

There is nothing to set rounding mode as "none". What else can I do to maintain Decimal style formatting along with trimmed decimal digits? Any help will be appreciated. Thanks.


Solution

  • The following works for me:

    NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
    [numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
    [numberFormatter setMaximumFractionDigits:2];
    // optional - [numberFormatter setMinimumFractionDigits:2];
    [numberFormatter setRoundingMode:NSNumberFormatterRoundDown];
    NSNumber *num = @(123456.9964);
    NSString *numberAsString = [numberFormatter stringFromNumber:num];
    NSLog(@"%@", numberAsString);
    

    The output is: 123,456.99

    Part of your problem is the use of numberWithFloat: instead of numberWithDouble:. Your number has too many digits for float.