Как добавить запятые к числу каждые 3 цифры в Objective C?
Если у меня есть ряд int aNum = 2000000
Как мне отформатировать это, чтобы я мог отобразить его как NSString 2,000,000?
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))
простое решение может быть таким. Мой ответ почти такой же, как ответ @ 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]]];