2012-07-19 1 views
5

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

ответ

11

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

используя Objective-C

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

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

с использованием СВИФТ 3

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

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

+0

Да, это делает именно то, что нужно! Спасибо, даже поздний ответ оценен! – user8472

+0

Добро пожаловать! У меня были некоторые трудности с локализацией. Удачи! – JFS

+0

Magic. И там я был, написав категории NSNumber ... когда все, что мне было нужно, было уже там, аккуратно и просто. Это такие мелочи, которые нас так любят Apple. – KPM