Как форматировать и печатать числа с плавающей запятой на iOS?

Я хотел бы создать форматированный вывод числа с плавающей запятой с правильной локализацией на 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?


person user8472    schedule 19.07.2012    source источник


Ответы (1)


Райан не совсем не прав. Используйте метод localizedStringWithFormat:

используя target-c

NSNumber *yourNumber = [nf numberFromString:yourString];
//to create the formatted NSNumber object

NSString *yourString = [NSString localizedStringWithFormat:@"%.2F", yourNumber];
//to create the localized output

с помощью SWIFT 3

let yourString: String
yourString = String.localizedStringWithFormat("%.2F", yourDoubleNumber) //no need for NSNumber Object

Немного поздно, но это все еще может помочь. Удачи!

person JFS    schedule 13.06.2013
comment
Да, это именно то, что нужно! Спасибо, даже поздний ответ приветствуется! - person user8472; 16.06.2013
comment
Пожалуйста! У меня тоже были трудности с локализацией. Удачи! - person JFS; 16.06.2013
comment
Магия. И вот я писал категории NSNumber... когда все, что мне было нужно, уже было там, аккуратно и просто. Именно из-за таких мелочей мы так любим Apple. - person KPM; 05.09.2014