Search code examples
iosobjective-cnsnumbernsnumberformatternslocale

NSNumberFormatter issue with numberFromString


I have a category on NSString with this method:

-(NSNumber *)numberValue
{
    if (!nfStr)
    {
        nfStr = [[NSNumberFormatter alloc] init];
    }

    NSLocale *current = [NSLocale autoupdatingCurrentLocale];

    [nfStr setLocale:current];
    [nfStr setDecimalSeparator:[current objectForKey:NSLocaleDecimalSeparator]];
    [nfStr setGroupingSeparator:[current objectForKey:NSLocaleGroupingSeparator]];

    return [nfStr numberFromString:self];
}

My current locale is it-IT (decimal separator: "," grouping separator: ".")

when I use stringFromNumber with NSNumber 90000 the NumberFormatter return a correctly formatted string "90.000"

when in a textfield I write the string "90.000" the NumberFormatter return nil instead of NSNumber 90000

why?

Thanks

edit: textfield delegate

-(void)textFieldDidEndEditing:(UITextField *)textField
{
  myObject.r.qtaOm = [Trim(textField.text) numberValue];
}

Solution

  • You have to set the NumberStyle on the formatter.

    [nfStr setNumberStyle:NSNumberFormatterDecimalStyle];
    

    You can use:

    enum {
       NSNumberFormatterNoStyle = kCFNumberFormatterNoStyle,
       NSNumberFormatterDecimalStyle = kCFNumberFormatterDecimalStyle,
       NSNumberFormatterCurrencyStyle = kCFNumberFormatterCurrencyStyle,
       NSNumberFormatterPercentStyle = kCFNumberFormatterPercentStyle,
       NSNumberFormatterScientificStyle = kCFNumberFormatterScientificStyle,
       NSNumberFormatterSpellOutStyle = kCFNumberFormatterSpellOutStyle
    };