Search code examples
objective-cdecimalnsnumberformatter

Don’t lose even last zero of decimal value


Currently I have string inputs that look like: 16904.48, 9324.00, 6806.10

I want my client to output: 16,904.48, 9,324.00, 6806.10

I have written the following code:

-(NSString*)methodChangeNumberFormat:(NSString*)strGivenValue {

    NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
    [numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];

    NSNumber *nsNumTmp = [numberFormatter numberFromString:strGivenValue];

    NSString *strNumFormatted = [numberFormatter stringFromNumber:nsNumTmp];
    strNumFormatted = [NSString stringWithFormat:@"$%@",strNumFormatted];
    NSLog(@"formattedNumberString: %@", strNumFormatted);

    return strNumFormatted;
}

Result: 16,904.48, 9,324, 6,806.1

But this isn't what I want, please help me to get expected result.

Now, am following input as NSString. But I am ready to change the input to any data type.


Solution

  • There is a number formatter style that does what it looks like you're trying to accomplish. Try using NSNumberFormatterCurrencyStyle.

    - (NSString *)methodChangeNumberFormat:(NSString*)strGivenValue {
        NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
    
        // Set decimal style and read given value
        [numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
        NSNumber *numberFromString = [numberFormatter numberFromString:strGivenValue];
    
        // Set currency style and produce formatted value
        [numberFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
        NSString *strNumFormatted = [numberFormatter stringFromNumber:numberFromString];
        NSLog(@"formattedNumberString: %@", strNumFormatted);
    
        return strNumFormatted;
    }
    

    Output:

    formattedNumberString: $16,904.48
    formattedNumberString: $9,324.00
    formattedNumberString: $6,806.10