6

I have a float that I'd like to display to one decimal place. E.g. 104.8135674... to be displayed as 104.8 in English. Usually I'd use:

myString = [NSString stringWithFormat:@"%.1f",myFloat];

However, I'd like to localize the number, so I tried:

myString = [NSString localizedStringWithFormat:@"%.1f",myFloat];

This works to assign the correct decimal symbol (e.g.

English: 104.8

German: 104,8

However, for languages that use don't use arabic numerals (0123456789), the correct decimal symbol is used, but the numbers are still in arabic numerals. e.g.

Bahrain-Arabic: 104,8 (it should use different symbols for the numbers)

So I tried:

myString = [NSNumberFormatter localizedStringFromNumber:[NSNumber numberWithFloat:myFloat] numberStyle:kCFNumberFormatterDecimalStyle];

But with that I can't seem to specify the number of decimal places. It gives e.g.

English: 104.813

mskfisher
  • 3,291
  • 4
  • 35
  • 48
MattyG
  • 8,449
  • 6
  • 44
  • 48

1 Answers1

12

NSNumberFormatter -setMaximumFractionDigits: is used for that purpose and you can reuse the formatter which is quite good:

NSNumberFormatter * formatter =  [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:kCFNumberFormatterDecimalStyle];
[formatter setMaximumFractionDigits:1];
[formatter setLocale:[NSLocale currentLocale]];
NSString * myString = [formatter stringFromNumber:[NSNumber numberWithFloat:123.456]];
A-Live
  • 8,904
  • 2
  • 39
  • 74
  • That's it, I started down that track too, but lost it somewhere along the way. Thanks for setting me straight. – MattyG Jul 16 '12 at 12:32