Я хотел бы создать форматированный вывод числа с плавающей запятой с правильной локализацией на Cocoa -Touch. Вывод должен быть эквивалентен printf("%<a>.<b>f", n)
, где <a>
— общее количество цифр, а <f>
— максимальное количество дробных цифр.
Настройка NSNumberFormatter
с помощью <a>=6
и<f>=2
:(Платформа — iOS 5.1 SDK, Xcode 4.3.3 и iPhone Simulator 5.1 )
NSNumberFormatter *nf = [[NSNumberFormatter alloc] init];
[nf setNumberStyle:NSNumberFormatterDecimalStyle];
[nf setPaddingCharacter:@" "];
[nf setUsesGroupingSeparator:NO];
[nf setLocale:[NSLocale autoupdatingCurrentLocale]];
[nf setUsesSignificantDigits:YES];
[nf setMaximumSignificantDigits:6];
[nf setMaximumFractionDigits:2];
[nf setRoundingMode:NSNumberFormatterRoundFloor];
NSLog(@"Test: %@", [nf stringFromNumber:[NSNumber numberWithDouble:2.64324897]]);
. Ожидаемый результат(с немецкой локалью):Test: 2,64
Наблюдаемый выход(с немецкой локалью):Test: 2,64324
Другие наблюдения:
Я пытался использовать разные значения для цифр дроби, например. [nf setMaximumFractionDigits:4]
или [nf setMaximumFractionDigits:0]
. Результат не изменился, кажется, что цифры дроби игнорируются. Изменение языкового стандарта на США изменяет только ,
на .
, а не количество дробных цифр.
Вопрос:Как я могу перевестиprintf
-правильно отформатировать строку в NSNumberFormatter
?