The NumberFormatter class
(PHP 5 >= 5.3.0, PHP 7, PHP 8, 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%.
Для більш складного форматування, наприклад для аналізу числа, використовується форматування засноване на наборі правил.
Огляд класів
class NumberFormatter
{
/* Константы */
public
const
int
PATTERN_DECIMAL;
public
const
int
DECIMAL;
public
const
int
CURRENCY;
public
const
int
PERCENT;
public
const
int
SCIENTIFIC;
public
const
int
SPELLOUT;
public
const
int
ORDINAL;
public
const
int
DURATION;
public
const
int
PATTERN_RULEBASED;
public
const
int
IGNORE;
public
const
int
CURRENCY_ACCOUNTING;
public
const
int
DEFAULT_STYLE;
public
const
int
ROUND_CEILING;
public
const
int
ROUND_FLOOR;
public
const
int
ROUND_DOWN;
public
const
int
ROUND_UP;
public
const
int
ROUND_HALFEVEN;
public
const
int
ROUND_HALFDOWN;
public
const
int
ROUND_HALFUP;
public
const
int
PAD_BEFORE_PREFIX;
public
const
int
PAD_AFTER_PREFIX;
public
const
int
PAD_BEFORE_SUFFIX;
public
const
int
PAD_AFTER_SUFFIX;
public
const
int
PARSE_INT_ONLY;
public
const
int
GROUPING_USED;
public
const
int
DECIMAL_ALWAYS_SHOWN;
public
const
int
MAX_INTEGER_DIGITS;
public
const
int
MIN_INTEGER_DIGITS;
public
const
int
INTEGER_DIGITS;
public
const
int
MAX_FRACTION_DIGITS;
public
const
int
MIN_FRACTION_DIGITS;
public
const
int
FRACTION_DIGITS;
public
const
int
MULTIPLIER;
public
const
int
GROUPING_SIZE;
public
const
int
ROUNDING_MODE;
public
const
int
ROUNDING_INCREMENT;
public
const
int
FORMAT_WIDTH;
public
const
int
PADDING_POSITION;
public
const
int
SECONDARY_GROUPING_SIZE;
public
const
int
SIGNIFICANT_DIGITS_USED;
public
const
int
MIN_SIGNIFICANT_DIGITS;
public
const
int
MAX_SIGNIFICANT_DIGITS;
public
const
int
LENIENT_PARSE;
public
const
int
POSITIVE_PREFIX;
public
const
int
POSITIVE_SUFFIX;
public
const
int
NEGATIVE_PREFIX;
public
const
int
NEGATIVE_SUFFIX;
public
const
int
PADDING_CHARACTER;
public
const
int
CURRENCY_CODE;
public
const
int
DEFAULT_RULESET;
public
const
int
PUBLIC_RULESETS;
public
const
int
DECIMAL_SEPARATOR_SYMBOL;
public
const
int
GROUPING_SEPARATOR_SYMBOL;
public
const
int
PATTERN_SEPARATOR_SYMBOL;
public
const
int
PERCENT_SYMBOL;
public
const
int
ZERO_DIGIT_SYMBOL;
public
const
int
DIGIT_SYMBOL;
public
const
int
MINUS_SIGN_SYMBOL;
public
const
int
PLUS_SIGN_SYMBOL;
public
const
int
CURRENCY_SYMBOL;
public
const
int
INTL_CURRENCY_SYMBOL;
public
const
int
MONETARY_SEPARATOR_SYMBOL;
public
const
int
EXPONENTIAL_SYMBOL;
public
const
int
PERMILL_SYMBOL;
public
const
int
PAD_ESCAPE_SYMBOL;
public
const
int
INFINITY_SYMBOL;
public
const
int
NAN_SYMBOL;
public
const
int
SIGNIFICANT_DIGIT_SYMBOL;
public
const
int
MONETARY_GROUPING_SEPARATOR_SYMBOL;
public
const
int
TYPE_DEFAULT;
public
const
int
TYPE_INT32;
public
const
int
TYPE_INT64;
public
const
int
TYPE_DOUBLE;
public
const
int
TYPE_CURRENCY;
/* Методы */
public __construct(string $locale, int $style, ?string $pattern = null)
public static create(string $locale, int $style, ?string $pattern = null): ?NumberFormatter
public formatCurrency(float $amount, string $currency): string|false
public format(int|float $num, int $type = NumberFormatter::TYPE_DEFAULT): string|false
public getAttribute(int $attribute): int|float|false
public getErrorCode(): int
public getErrorMessage(): string
public getLocale(int $type = ULOC_ACTUAL_LOCALE): string|false
public getPattern(): string|false
public getSymbol(int $symbol): string|false
public getTextAttribute(int $attribute): string|false
public parseCurrency(string $string, string &$currency, int &$offset = null): float|false
public parse(string $string, int $type = NumberFormatter::TYPE_DOUBLE, int &$offset = null): int|float|false
public setAttribute(int $attribute, int|float $value): bool
public setPattern(string $pattern): bool
public setSymbol(int $symbol, string $value): bool
public setTextAttribute(int $attribute, string $value): bool
}
Обумовлені константи
Ці стилі використовуються функцією numfmt_create()для определения типа форматирования.
NumberFormatter::PATTERN_DECIMAL
Формат із десятковою точкою заданий шаблоном
NumberFormatter::DECIMAL
Формат із десятковою точкою
NumberFormatter::CURRENCY
грошовий формат
NumberFormatter::PERCENT
Відсотковий формат
NumberFormatter::SCIENTIFIC
Науковий формат
NumberFormatter::SPELLOUT
Розібраний формат на основі правил
NumberFormatter::ORDINAL
Чисельний формат на основі правил
NumberFormatter::DURATION
Формат тривалості на основі правил
NumberFormatter::PATTERN_RULEBASED
Формат на основі правил за шаблоном
NumberFormatter::CURRENCY_ACCOUNTING
Формат валюти для обліку, наприклад, ($3.00)
для негативної суми у валюті замість -$3.00
. Доступно з PHP 7.4.1 та ICU 53.
NumberFormatter::DEFAULT_STYLE
Формат за промовчанням для локалі
NumberFormatter::IGNORE
Псевдонім для PATTERN_DECIMAL
Дані константи визначають, як будуть розібрані чи відформатовані числа. Їх необхідно передавати функціям numfmt_format() і numfmt_parse()
NumberFormatter::TYPE_DEFAULT
Тип визначається типом змінної
NumberFormatter::TYPE_INT32
Форматування/розбір як 32-бітного цілого
NumberFormatter::TYPE_INT64
Форматування/розбір як 64-бітного цілого
NumberFormatter::TYPE_DOUBLE
Форматування/розбір як раціонального (float)
NumberFormatter::TYPE_CURRENCY
Форматування/розбір як грошової одиниці. Застаріло, починаючи з PHP 8.3.0
Атрибут формата чисел дляnumfmt_get_attribute() і numfmt_set_attribute()
NumberFormatter::PARSE_INT_ONLY
Розбирати лише цілі.
NumberFormatter::GROUPING_USED
Використовувати роздільник, що групує.
NumberFormatter::DECIMAL_ALWAYS_SHOWN
Завжди показувати десяткову точку.
NumberFormatter::MAX_INTEGER_DIGITS
Максимальна кількість цілих цифр.
NumberFormatter::MIN_INTEGER_DIGITS
Мінімальна кількість цілих цифр.
NumberFormatter::INTEGER_DIGITS
Цілих цифр.
NumberFormatter::MAX_FRACTION_DIGITS
Максимальна кількість цифр після коми.
NumberFormatter::MIN_FRACTION_DIGITS
Мінімальна кількість цифр після коми.
NumberFormatter::FRACTION_DIGITS
Число цифр після коми.
NumberFormatter::MULTIPLIER
Множник.
NumberFormatter::GROUPING_SIZE
Розмір угруповання.
NumberFormatter::ROUNDING_MODE
Режим заокруглення.
NumberFormatter::ROUNDING_INCREMENT
Збільшення округлення.
NumberFormatter::FORMAT_WIDTH
Ширина, на яку буде доповнено виведення format().
NumberFormatter::PADDING_POSITION
Позиція з якою доповнення матиме місце. Дивіться опис констант доповнення.
NumberFormatter::SECONDARY_GROUPING_SIZE
Вторинний розмір угруповання.
NumberFormatter::SIGNIFICANT_DIGITS_USED
Використовувати цифри.
NumberFormatter::MIN_SIGNIFICANT_DIGITS
Мінімальна кількість цифр.
NumberFormatter::MAX_SIGNIFICANT_DIGITS
Максимальна кількість цифр.
NumberFormatter::LENIENT_PARSE
Режим поблажливий синтаксичного аналізу для заснованих на правилах форматів.
Атрибути тексту форматування чисел, що використовуються в numfmt_get_text_attribute() і numfmt_set_text_attribute()
NumberFormatter::POSITIVE_PREFIX
Позитивний префікс.
NumberFormatter::POSITIVE_SUFFIX
Позитивний суфікс.
NumberFormatter::NEGATIVE_PREFIX
Негативний префікс.
NumberFormatter::NEGATIVE_SUFFIX
Негативний суфікс.
NumberFormatter::PADDING_CHARACTER
Символ для доповнення рядка.
NumberFormatter::CURRENCY_CODE
Код грошової одиниці ISO.
NumberFormatter::DEFAULT_RULESET
Набір стандартних правил. Доступно лише для форматування на основі правил.
NumberFormatter::PUBLIC_RULESETS
Публічний набір правил. Доступно лише для форматування на основі правил. Цей атрибут доступний лише для читання. Публічний набір правил повертається у вигляді рядка, в якому кожен набір правил відокремлений крапкою з комою (;).
Символи форматування чисел для numfmt_get_symbol() і numfmt_set_symbol()
NumberFormatter::DECIMAL_SEPARATOR_SYMBOL
Десятковий роздільник.
NumberFormatter::GROUPING_SEPARATOR_SYMBOL
Розділювач груп.
NumberFormatter::PATTERN_SEPARATOR_SYMBOL
Розділювач символ у шаблоні.
NumberFormatter::PERCENT_SYMBOL
Відсоток символ.
NumberFormatter::ZERO_DIGIT_SYMBOL
Нуль.
NumberFormatter::DIGIT_SYMBOL
Символ, що представляє цифру в шаблон.
NumberFormatter::MINUS_SIGN_SYMBOL
Мінус знак.
NumberFormatter::PLUS_SIGN_SYMBOL
Плюс знак.
NumberFormatter::CURRENCY_SYMBOL
Значок грошової одиниці символ.
NumberFormatter::INTL_CURRENCY_SYMBOL
The international currency symbol.
NumberFormatter::MONETARY_SEPARATOR_SYMBOL
Грошовий роздільник.
NumberFormatter::EXPONENTIAL_SYMBOL
Символ ступеня десяти.
NumberFormatter::PERMILL_SYMBOL
Символ проміле.
NumberFormatter::PAD_ESCAPE_SYMBOL
Екранування символ заповнювача.
NumberFormatter::INFINITY_SYMBOL
Нескінченності символ.
NumberFormatter::NAN_SYMBOL
Символ NAN (Not-a-number, нечисло).
NumberFormatter::SIGNIFICANT_DIGIT_SYMBOL
Значок цифри.
NumberFormatter::MONETARY_GROUPING_SEPARATOR_SYMBOL
Розділювач груп для фінансового формату.
Режими округлення для numfmt_get_attribute() і numfmt_set_attribute() з атрибутом NumberFormatter::ROUNDING_MODE
NumberFormatter::ROUND_CEILING
Округлення у бік позитивної нескінченності.
NumberFormatter::ROUND_DOWN
Округлення вниз.
NumberFormatter::ROUND_FLOOR
Округлення у бік негативної нескінченності.
NumberFormatter::ROUND_HALFDOWN
Округлення у бік "найближчого сусіда" крім випадків, коли вони на однаковій відстані. І тут округлення вниз.
NumberFormatter::ROUND_HALFEVEN
Округлення у бік "найближчого сусіда" крім випадків, коли вони на однаковій відстані. І тут округлення до парного значення.
NumberFormatter::ROUND_HALFUP
Округлення у бік "найближчого сусіда" крім випадків, коли вони на однаковій відстані. В цьому випадку заокруглення вгору.
NumberFormatter::ROUND_UP
Округлення вгору.
Значения позиции дополнения дляnumfmt_get_attribute() і numfmt_set_attribute() з атрибутом NumberFormatter::PADDING_POSITION
NumberFormatter::PAD_AFTER_PREFIX
Символи доповнення вставляються після префіксу.
NumberFormatter::PAD_AFTER_SUFFIX
Символи доповнення вставляються після суфіксу.
NumberFormatter::PAD_BEFORE_PREFIX
Символи доповнення вставляються до префіксу.
NumberFormatter::PAD_BEFORE_SUFFIX
Символи доповнення вставляються до суфіксу.
Дивіться також
- » ICU formatting documentation
- » ICU. Форматування чисел
- » ICU. Форматування десяткових дробів
- » ICU. Форматування на основі правил
Зміст
- NumberFormatter::create— Створює засіб форматування чисел
- NumberFormatter::formatCurrency - Форматує значення валюти
- NumberFormatter::format - Форматує число
- NumberFormatter::getAttribute— Отримує атрибут
- NumberFormatter::getErrorCode— Отримує останній код помилки засобу форматування
- NumberFormatter::getErrorMessage— Отримує останнє повідомлення про помилку засобу форматування
- NumberFormatter::getLocale— Отримує локаль засобу форматування
- NumberFormatter::getPattern— Отримує шаблон засобу форматування
- NumberFormatter::getSymbol— Отримує значення символу
- NumberFormatter::getTextAttribute— Отримує текстовий атрибут
- NumberFormatter::parseCurrency - Розбирає номер валюти
- NumberFormatter::parse - Розбирає число
- NumberFormatter::setAttribute - Встановлює атрибут
- NumberFormatter::setPattern— Встановлює шаблон засобу форматування
- NumberFormatter::setSymbol— Встановлює значення символу
- NumberFormatter::setTextAttribute - Встановлює текстовий атрибут