Как добавить запятые к числу каждые 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]]];