Если у меня есть номер int aNum = 2000000
, как мне его форматировать, чтобы отобразить его как NSString 2 000 000?
Как добавить запятые для номера каждые 3 цифры в Objective C?
Ответ 1
Не делайте собственного форматирования чисел. Вы почти наверняка не получите все случаи краев правильно или правильно обрабатываете все возможные локали. Используйте NSNumberFormatter
для форматирования числовых данных в локализованное строковое представление.
Вы использовали бы метод экземпляра NSNumberFormatter
-setGroupingSeparator:
, чтобы установить разделитель группировки в @","
(или еще лучше [[NSLocale currentLocale] objectForKey:NSLocaleGroupingSeparator]
; thanks @ntesler) и -setGroupingSize:
, чтобы поместить разделитель группировки каждые 3 цифры.
Ответ 2
Используйте NSNumberFormatter
.
В частности:
NSNumberFormatter *formatter = [NSNumberFormatter new];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle]; // this line is important!
NSString *formatted = [formatter stringFromNumber:[NSNumber numberWithInteger:2000000]];
[formatter release];
По умолчанию NSNumberFormatter
использует текущий язык, поэтому по умолчанию разделители группировки устанавливаются в их правильные значения. Главное - запомнить стиль номера.
Ответ 3
Здесь статический метод на NSNumberFormatter
, который делает именно то, что вам нужно:
int aNum = 2000000;
NSString *display = [NSNumberFormatter localizedStringFromNumber:@(aNum)
numberStyle:NSNumberFormatterDecimalStyle];
Этот способ немного более краткий, чем создание нового NSNumberFormatter
, если вам не нужно делать какую-либо дополнительную конфигурацию форматирования.
Ответ 4
Еще проще:
NSNumber *someNumber = @(1234567890);
NSString *modelNumberString = [NSString localizedStringWithFormat:@"%@", someNumber];
NSLog(@"Number with commas: %@", modelNumberString);
Сотрудник просто научил меня этому сегодня. #amazing
Ответ 5
Подумайте, как я получу это сообщение, ища образец. Поэтому, если вы работаете с номером, обратите внимание на следующие параметры:
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]];
ИЗМЕНИТЬ
Чтобы иметь возможность использовать разные цифровые разделители, используйте NSLocale
.
Добавить в код, где NSLocale
указан в локальном идентификаторе:
[formatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"de_DE"]];
или использовать текущий локальный:
[formatter setLocale:[NSLocale currentLocale]];
Ответ 6
Быстрая версия
let formatter = NSNumberFormatter()
formatter.numberStyle = .DecimalStyle
formatter.maximumFractionDigits = decimalPlaces
let result = formatter.stringFromNumber(NSNumber(double: 8.0))
Ответ 7
Простым решением может быть это. Мой ответ почти такой же, как @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]]];