Как добавить запятые к числу каждые 3 цифры в Objective C? - PullRequest
71 голосов
/ 10 февраля 2010

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

Ответы [ 8 ]

147 голосов
/ 14 декабря 2011

Использование NSNumberFormatter.

В частности:

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

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

[formatter release];

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

80 голосов
/ 10 февраля 2010

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

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

33 голосов
/ 04 сентября 2012

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

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

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

18 голосов
/ 06 января 2015

Еще проще:

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

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

16 голосов
/ 03 марта 2013

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

setNumberStyle:NSNumberFormatterCurrencyStyle // if you are working with currency

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

setNumberStyle:NSNumberFormatterDecimalStyle

Весь код для ARC.

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

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

Если вы работаете с Float и вам нужно получить такой результат, как 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]];
1 голос
/ 24 ноября 2015

Swift версия

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

По http://ios.eezytutorials.com

0 голосов
/ 13 сентября 2018

Для Swift 4.0

let formatter = NumberFormatter()

formatter.numberStyle = .decimal

formatter.minimumFractionDigits = 2

formatter.maximumFractionDigits = 2

let result = formatter.string(from: NSNumber(value: 123456))
0 голосов
/ 29 августа 2017

Это может быть простое решение. Мой ответ почти такой же, как ответ @ Назира, но с небольшим фокусом.

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]]];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...