Средства форматирования числа
NSNumberFormatter
обеспечивает два удобных метода —stringFromNumber:
и numberFromString:
— то, что можно использовать, чтобы создать строковое представление числа и создать объект числа из строки соответственно. Для создания представления локализованной строки числа, не создавая объект средства форматирования можно использовать метод класса localizedStringFromNumber:numberStyle:
.
Если у Вас есть более сложные требования при парсинге строки, в дополнение к методам, наследованным от NSFormatter
(такой как getObjectValue:forString:errorDescription:
), getObjectValue:forString:range:error:
метод позволяет Вам указывать поддиапазон строки, которая будет проанализирована, и это возвращает диапазон фактически проанализированной строки. (В случае отказа это указывает, где произошел отказ.) Это также возвращается NSError
объект, который может содержать богатую информацию о проблеме.
Существует много атрибутов, которые можно получить и установить на средстве форматирования числа. При представлении информации пользователю необходимо обычно просто использовать NSNumberFormatter
константы стиля для указания предопределенных наборов атрибутов, определяющих, как отформатированное число выведено на экран. Если необходимо генерировать представление числа в точном формате, однако, необходимо использовать строку формата.
Используйте стили средства форматирования для подарить числам предпочтения пользователя
NSNumberFormatter
упрощает для Вас форматировать различные виды числа с помощью настроек пользователь, сконфигурированный в Международной предпочтительной панели в Установках системы. NSNumberFormatter
константы стиля —NSNumberFormatterDecimalStyle
, NSNumberFormatterCurrencyStyle
, NSNumberFormatterPercentStyle
, NSNumberFormatterScientificStyle
, или NSNumberFormatterSpellOutStyle
(который генерирует текстовое представление числа) —, указывают наборы атрибутов, определяющих, как число выведено на экран согласно предпочтениям пользователя.
Вы указываете стиль использования средства форматирования числа setNumberStyle:
. Перечисление 1 иллюстрирует, как можно отформатировать дату с помощью стилей средства форматирования.
Перечисление 1 , Форматирующее число с помощью стиля средства форматирования
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; |
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle]; |
NSString *formattedNumberString = [numberFormatter stringFromNumber:@122344.4563]; |
NSLog(@"formattedNumberString: %@", formattedNumberString); |
// Output for locale en_US: "formattedNumberString: formattedNumberString: 122,344.453" |
Используйте строки формата для указания пользовательских форматов
Строка формата использует образцы формата из Технического стандарта № 35 Unicode. Версия стандарта меняется в зависимости от выпуска операционной системы:
OS X v10.9 и iOS 7 использует версию tr35-31.
OS X v10.8 и iOS 6 использует версию tr35-25.
iOS 5 использует версию tr35-19.
OS X v10.7 и iOS 4.3 использует версию tr35-17.
iOS 4.0, iOS 4.1 и iOS 4.2 используют версию tr35-15.
iOS 3.2 использует версию tr35-12.
OS X v10.6, iOS 3.0 и iOS 3.1 использует версию tr35-10.
OS X v10.5 использует версию tr35-6.
OS X v10.4 использует версию tr35-4.
Отметьте с форматом строки формата Unicode, необходимо включить буквенный текст в строку формата между апострофами (''
).
Вы указываете строку формата использования средства форматирования числа setPositiveFormat:
и setNegativeFormat:
. Перечисление 2 иллюстрирует, как можно отформатировать дату с помощью стилей средства форматирования.
Перечисление 2 , Форматирующее число с помощью строки формата
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; |
[numberFormatter setPositiveFormat:@"###0.##"]; |
NSString *formattedNumberString = [numberFormatter stringFromNumber:@122344.4563]; |
NSLog(@"formattedNumberString: %@", formattedNumberString); |
// Output for locale en_US: "formattedNumberString: formattedNumberString: 122,344.45" |
Проценты
При использовании строки формата с символом «%» для форматирования процентов, результаты могут сбить с толку. Рассмотрите следующий пример:
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; |
[numberFormatter setPositiveFormat:@"0.00%;0.00%;-0.00%"]; |
NSLog(@"%@", [numberFormatter stringFromNumber:@4.0]); |
// Output: "400.00%". |
Поскольку строка формата указана для использования процентов, NSNumberFormatter
интерпретирует номер четыре как часть (где 1 100%), и представляет его как таковой (4 = 4/1 = 400%).
Если Вы хотите представлять число как процент, необходимо использовать NSNumberFormatterPercentStyle
стиль — это также гарантирует, что проценты отформатированы соответственно для локали:
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; |
[numberFormatter setNumberStyle:NSNumberFormatterPercentStyle]; |
NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]; |
[numberFormatter setLocale:usLocale]; |
NSLog(@"en_US: %@", [numberFormatter stringFromNumber:@4.0]); |
// Output: "en_US: 400%". |
NSLocale *faLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"fa_IR"]; |
[numberFormatter setLocale:faLocale]; |
NSLog(@"fa_IR: %@", [numberFormatter stringFromNumber:@4.0]); |
// Output: "fa_IR: ٪۴۰۰." |
Номенклатура
NSNumberFormatter
обеспечивает несколько методов (такой как setMaximumFractionDigits:
) это позволяет Вам управлять числом дробных цифр, позволенных, как введено экземпляром. “Дробные цифры” являются числами после десятичного разделителя (в английских локалях, десятичный разделитель обычно упоминается как «десятичная точка»).