The NumberFormatter class

(PHP 5 >= 5.3.0, PHP 7, PECL intl >= 1.0.0)

Введение

Программы хранят и оперируют числами используя, не зависящее от локали, бинарное представление. Когда же они выводятся на экран или печатаются, они конвертируются в строки в соответствии с требованиями локали. К примеру, число 12345.67 выведется как "12,345.67" в локали US, как "12 345,67" во французской локали и как "12.345,67" в немецкой.

Вызывая методы этого класса, вы можете форматировать числа, денежные единицы и процентнын величины в представлении нужной локали. Класс NumberFormatter чуствителен к локали, следовательно вам необходимо будет создавать новый экземпляр класса для каждой локали. Методы NumberFormatter форматируют примитивные типы чисел, такие как "double", и выводят их в специфичном для локали представлении.

Для денежных единиц вы можете использовать тип форматирования денежных единиц, который возвращает строку с отформатированным числом и символом денежной единицы. Естественно NumberFormatter не знает о курсах обмена, так что для всех денежных единиц будет возвращено одно и то же число. К примеру, для числа 9988776.65 результат будет такой:

  • 9 988 776,65 € для Франции
  • 9.988.776,65 € для Германии
  • $9,988,776.65 для США

Для форматирования процентных величин используется свой тип форматирования. При таком форматировании число 0.75 будет выведено как 75%.

Для более сложного форматирования, например для разбора числа, используется форматирование основанное на наборе правил.

Обзор классов

NumberFormatter {
/* Методы */
public __construct ( string $locale , int $style [, string $pattern ] )
public static NumberFormatter create ( string $locale , int $style [, string $pattern ] )
public string formatCurrency ( float $value , string $currency )
public string format ( number $value [, int $type ] )
public int getAttribute ( int $attr )
public int getErrorCode ( void )
public string getErrorMessage ( void )
public string getLocale ([ int $type ] )
public string getPattern ( void )
public string getSymbol ( int $attr )
public string getTextAttribute ( int $attr )
public float parseCurrency ( string $value , string &$currency [, int &$position ] )
public mixed parse ( string $value [, int $type [, int &$position ]] )
public bool setAttribute ( int $attr , int $value )
public bool setPattern ( string $pattern )
public bool setSymbol ( int $attr , string $value )
public bool setTextAttribute ( int $attr , string $value )
}

Предопределенные константы

Данные стили используются функцией numfmt_create() для определения типа форматирования.

NumberFormatter::PATTERN_DECIMAL (integer)
Формат с десятичной точкой заданный шаблоном
NumberFormatter::DECIMAL (integer)
Формат с десятичной точкой
NumberFormatter::CURRENCY (integer)
денежный формат
NumberFormatter::PERCENT (integer)
Процентный формат
NumberFormatter::SCIENTIFIC (integer)
Научный формат
NumberFormatter::SPELLOUT (integer)
Разобранный формат на основе правил
NumberFormatter::ORDINAL (integer)
Числительный формат на основе правил
NumberFormatter::DURATION (integer)
Формат длительности на основе правил
NumberFormatter::PATTERN_RULEBASED (integer)
Формат на основе правил по шаблону
NumberFormatter::DEFAULT_STYLE (integer)
Формат по умолчанию для локали
NumberFormatter::IGNORE (integer)
Псевдоним для PATTERN_DECIMAL

Данные константы определяют как будут разобраны или отформатированы числа. Их необходимо передавать функциям numfmt_format() и numfmt_parse().

NumberFormatter::TYPE_DEFAULT (integer)
Тип определяется типом переменной
NumberFormatter::TYPE_INT32 (integer)
Форматирование/разбор как 32-битного целого
NumberFormatter::TYPE_INT64 (integer)
Форматирование/разбор как 64-битного целого
NumberFormatter::TYPE_DOUBLE (integer)
Форматирование/разбор как рационального (float)
NumberFormatter::TYPE_CURRENCY (integer)
Форматирование/разбор как денежной единицы

Аттрибут формата чисел для numfmt_get_attribute() и numfmt_set_attribute().

NumberFormatter::PARSE_INT_ONLY (integer)
Разбирать только целые.
NumberFormatter::GROUPING_USED (integer)
Использовать группирующий разделитель.
NumberFormatter::DECIMAL_ALWAYS_SHOWN (integer)
Всегда показывать десятичную точку.
NumberFormatter::MAX_INTEGER_DIGITS (integer)
Максимальное число целых цифр.
NumberFormatter::MIN_INTEGER_DIGITS (integer)
Минимальное число целых цифр.
NumberFormatter::INTEGER_DIGITS (integer)
Целых цифр.
NumberFormatter::MAX_FRACTION_DIGITS (integer)
Максимальное число цифр после запятой.
NumberFormatter::MIN_FRACTION_DIGITS (integer)
Минимальное число цифр после запятой.
NumberFormatter::FRACTION_DIGITS (integer)
Число цифр после запятой.
NumberFormatter::MULTIPLIER (integer)
Множитель.
NumberFormatter::GROUPING_SIZE (integer)
Размер группировки.
NumberFormatter::ROUNDING_MODE (integer)
Режим округления.
NumberFormatter::ROUNDING_INCREMENT (integer)
Приращение округления.
NumberFormatter::FORMAT_WIDTH (integer)
Ширина на которую будет дополнен вывод format().
NumberFormatter::PADDING_POSITION (integer)
Позиция с которой дополнение будет иметь место. Смотрите описание констант дополнения.
NumberFormatter::SECONDARY_GROUPING_SIZE (integer)
Вторичный размер группировки.
NumberFormatter::SIGNIFICANT_DIGITS_USED (integer)
Использовать значащие цифры.
NumberFormatter::MIN_SIGNIFICANT_DIGITS (integer)
Минимальное количество значащих цифр.
NumberFormatter::MAX_SIGNIFICANT_DIGITS (integer)
Максимальное количество значащих цифр.
NumberFormatter::LENIENT_PARSE (integer)
Режим снисходительны синтаксического анализа для основанных на правилах форматов.

Аттрибуты текста форматирования чисел, используются в numfmt_get_text_attribute() и numfmt_set_text_attribute().

NumberFormatter::POSITIVE_PREFIX (integer)
Положительный префикс.
NumberFormatter::POSITIVE_SUFFIX (integer)
Положительный суффикс.
NumberFormatter::NEGATIVE_PREFIX (integer)
Отрицательный префикс.
NumberFormatter::NEGATIVE_SUFFIX (integer)
Отрицательный суффикс.
NumberFormatter::PADDING_CHARACTER (integer)
Символ для дополнения строки.
NumberFormatter::CURRENCY_CODE (integer)
Код денежной единицы ISO.
NumberFormatter::DEFAULT_RULESET (integer)
Набор правил по умолчанию. Доступно только для форматирования на основе правил.
NumberFormatter::PUBLIC_RULESETS (integer)
Публичный набор правил. Доступно только для форматирования на основе правил. Этот аттрибут доступен только на чтение. Публичный набор правил возвращается в виде строки, в которой каждый набор правил отделен точкой с запятой (;).

Символы форматирования чисел для numfmt_get_symbol() и numfmt_set_symbol().

NumberFormatter::DECIMAL_SEPARATOR_SYMBOL (integer)
Десятичный разделитель.
NumberFormatter::GROUPING_SEPARATOR_SYMBOL (integer)
Разделитель групп.
NumberFormatter::PATTERN_SEPARATOR_SYMBOL (integer)
Символ разделителя в шаблона.
NumberFormatter::PERCENT_SYMBOL (integer)
Символ процента.
NumberFormatter::ZERO_DIGIT_SYMBOL (integer)
Ноль.
NumberFormatter::DIGIT_SYMBOL (integer)
Символ представляющий цифру в шаблоне.
NumberFormatter::MINUS_SIGN_SYMBOL (integer)
Знак минус.
NumberFormatter::PLUS_SIGN_SYMBOL (integer)
Знак плюс.
NumberFormatter::CURRENCY_SYMBOL (integer)
Символ обозначения денежной единицы.
NumberFormatter::INTL_CURRENCY_SYMBOL (integer)
The international currency symbol.
NumberFormatter::MONETARY_SEPARATOR_SYMBOL (integer)
Денежный разделитель.
NumberFormatter::EXPONENTIAL_SYMBOL (integer)
Символ степени десяти.
NumberFormatter::PERMILL_SYMBOL (integer)
Символ промиле.
NumberFormatter::PAD_ESCAPE_SYMBOL (integer)
Экранирование символа заполнителя.
NumberFormatter::INFINITY_SYMBOL (integer)
Символ бесконечности.
NumberFormatter::NAN_SYMBOL (integer)
Символ NAN (Not-a-number, не-число).
NumberFormatter::SIGNIFICANT_DIGIT_SYMBOL (integer)
Символ значащей цифры.
NumberFormatter::MONETARY_GROUPING_SEPARATOR_SYMBOL (integer)
Разделитель групп для денежного формата.

Режимы округления для numfmt_get_attribute() и numfmt_set_attribute() с аттрибутом NumberFormatter::ROUNDING_MODE.

NumberFormatter::ROUND_CEILING (integer)
Округление в сторону положительной бесконечности.
NumberFormatter::ROUND_DOWN (integer)
Округление вниз.
NumberFormatter::ROUND_FLOOR (integer)
Округление в сторону отрицательной бесконечности.
NumberFormatter::ROUND_HALFDOWN (integer)
Округление в сторону "ближайшего соседа" кроме случаев, когда они на одинаковом расстоянии. В этом случае округление вниз.
NumberFormatter::ROUND_HALFEVEN (integer)
Округление в сторону "ближайшего соседа" кроме случаев, когда они на одинаковом расстоянии. В этом случае округление к четному значению.
NumberFormatter::ROUND_HALFUP (integer)
Округление в сторону "ближайшего соседа" кроме случаев, когда они на одинаковом расстоянии. В этом случае округление вверх.
NumberFormatter::ROUND_UP (integer)
Округление вверх.

Значения позиции дополнения для numfmt_get_attribute() и numfmt_set_attribute() с аттрибутом NumberFormatter::PADDING_POSITION.

NumberFormatter::PAD_AFTER_PREFIX (integer)
Символы дополнения вставляются после префикса.
NumberFormatter::PAD_AFTER_SUFFIX (integer)
Символы дополнения вставляются после суффикса.
NumberFormatter::PAD_BEFORE_PREFIX (integer)
Символы дополнения вставляются до префикса.
NumberFormatter::PAD_BEFORE_SUFFIX (integer)
Символы дополнения вставляются до суффикса.

Содержание