Как добавить запятые к числу каждые 3 цифры в Objective C?


Если у меня есть ряд int aNum = 2000000 Как мне отформатировать это, чтобы я мог отобразить его как NSString 2,000,000?

8 69

8 ответов:

не делайте свое собственное форматирование чисел. Вы почти наверняка не получите все крайние случаи правильно или правильно обрабатывать все возможные локали. Используйте NSNumberFormatter для форматирования числовых данных в локализованное строковое представление.

можно использовать NSNumberFormatter метод -setGroupingSeparator: установить разделитель в @"," (или еще лучше [[NSLocale currentLocale] objectForKey:NSLocaleGroupingSeparator]; спасибо @ntesler) и -setGroupingSize: поставить разделитель каждые 3 цифры.

использовать NSNumberFormatter.

в частности:

NSNumberFormatter *formatter = [NSNumberFormatter new];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle]; // this line is important!

NSString *formatted = [formatter stringFromNumber:[NSNumber numberWithInteger:2000000]];

[formatter release];

по умолчанию NSNumberFormatter использует текущую локаль, поэтому разделители группирования по умолчанию имеют правильные значения. Главное-не забыть установить числовой стиль.

здесь статический метод на NSNumberFormatter что делает именно то, что вам нужно:

int aNum = 2000000;
NSString *display = [NSNumberFormatter localizedStringFromNumber:@(aNum)
                                                     numberStyle:NSNumberFormatterDecimalStyle];

этот способ немного более лаконичен, чем создание нового NSNumberFormatter Если вам не нужно делать никаких дополнительных настроек форматирования.

еще проще:

NSNumber *someNumber = @(1234567890);
NSString *modelNumberString = [NSString localizedStringWithFormat:@"%@", someNumber];
NSLog(@"Number with commas: %@", modelNumberString);

коллега только что научил меня этому сегодня. # удивительно

думаю, что некоторые, как я получу этот пост, ищу образец. Поэтому, если вы работаете с номером, обратите внимание на следующие параметры:

setNumberStyle:NSNumberFormatterCurrencyStyle // if you are working with currency

это может быть также

setNumberStyle:NSNumberFormatterDecimalStyle

весь код для дуги.

если вы работаете с целым числом и нужно получить результат, такой как 200,000

int value = 200000;
NSNumberFormatter * formatter = [NSNumberFormatter new];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
NSString * newString =  [formatter stringFromNumber:[NSNumber numberWithInteger:value]];

если вы работаете с поплавком и нужно получить результат, например, 200,000. 00

float value = 200000;
NSNumberFormatter * formatter = [NSNumberFormatter new];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setMaximumFractionDigits:2]; // Set this if you need 2 digits
NSString * newString =  [formatter stringFromNumber:[NSNumber numberWithFloat:value]];

EDIT

чтобы иметь возможность используйте различные цифровые сепараторы используйте NSLocale. Добавить в код, где NSLocale указывается код языка:

[formatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"de_DE"]];

или использовать текущее местное:

[formatter setLocale:[NSLocale currentLocale]];

Swift версия

let formatter = NSNumberFormatter()
formatter.numberStyle = .DecimalStyle
formatter.maximumFractionDigits = decimalPlaces
let result = formatter.stringFromNumber(NSNumber(double: 8.0))

By http://ios.eezytutorials.com

простое решение может быть таким. Мой ответ почти такой же, как ответ @ Nazir, но с небольшим трюком.

double current_balance = 2000000.00;

NSNumberFormatter * formatter = [NSNumberFormatter new];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
//[formatter setNumberStyle:NSNumberFormatterCurrencyStyle];  //if you want for currency with $ sign
[formatter setMinimumFractionDigits:2]; // Set this if you need 2 digits
[formatter setMaximumFractionDigits:2]; // Set this if you need 2 digits
NSString * currency_format =  [NSString stringWithFormat:@"%@", [formatter stringFromNumber:[NSNumber numberWithDouble:current_balance]]];

Для Swift 4.0

let formatter = NumberFormatter()

formatter.numberStyle = .decimal

formatter.minimumFractionDigits = 2

formatter.maximumFractionDigits = 2

let result = formatter.string(from: NSNumber(value: 123456))