Я хотел бы создать отформатированный вывод числа с плавающей запятой с правильной локализацией на Cocoa-Touch. Выход должен быть эквивалентен значению printf("%<a>.<b>f", n)
, где <a>
- общее количество цифр, а <f>
- максимальное количество дробных цифр.Как форматировать и печатать плавающие числа на iOS?
Настройка 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
?
Да, это делает именно то, что нужно! Спасибо, даже поздний ответ оценен! – user8472
Добро пожаловать! У меня были некоторые трудности с локализацией. Удачи! – JFS
Magic. И там я был, написав категории NSNumber ... когда все, что мне было нужно, было уже там, аккуратно и просто. Это такие мелочи, которые нас так любят Apple. – KPM