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 create ( string $locale , int $style , string $pattern = ? ) : NumberFormatter
public formatCurrency ( float $value , string $currency ) : string|false
public format ( int|float $value , int $type = ? ) : string
public getAttribute ( int $attr ) : int
public getErrorCode ( ) : int
public getErrorMessage ( ) : string
public getLocale ( int $type = ? ) : string
public getPattern ( ) : string
public getSymbol ( int $attr ) : string
public getTextAttribute ( int $attr ) : string
public parseCurrency ( string $value , string &$currency , int &$position = ? ) : float
public parse ( string $value , int $type = ? , int &$position = ? ) : mixed
public setAttribute ( int $attr , int $value ) : bool
public setPattern ( string $pattern ) : bool
public setSymbol ( int $attr , string $value ) : bool
public setTextAttribute ( int $attr , string $value ) : bool
}

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

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

NumberFormatter::PATTERN_DECIMAL (int)
Формат с десятичной точкой заданный шаблоном
NumberFormatter::DECIMAL (int)
Формат с десятичной точкой
NumberFormatter::CURRENCY (int)
денежный формат
NumberFormatter::PERCENT (int)
Процентный формат
NumberFormatter::SCIENTIFIC (int)
Научный формат
NumberFormatter::SPELLOUT (int)
Разобранный формат на основе правил
NumberFormatter::ORDINAL (int)
Числительный формат на основе правил
NumberFormatter::DURATION (int)
Формат длительности на основе правил
NumberFormatter::PATTERN_RULEBASED (int)
Формат на основе правил по шаблону
NumberFormatter::CURRENCY_ACCOUNTING (int)
Формат валюты для учета, например, ($3.00) для отрицательной суммы в валюте вместо -$3.00. Доступно с PHP 7.4.1 и ICU 53.
NumberFormatter::DEFAULT_STYLE (int)
Формат по умолчанию для локали
NumberFormatter::IGNORE (int)
Псевдоним для PATTERN_DECIMAL

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

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

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

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

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

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

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

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

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

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

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

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

Содержание