PHP.mk документација

NumberFormatter

Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.

class.numberformatter.php PHP.net прокси Преводот се освежува
Оригинал на PHP.net
Патека class.numberformatter.php Локална патека за оваа страница.
Извор php.net/manual/en Оригиналниот HTML се реупотребува и локално се стилизира.
Режим Прокси + превод во позадина Кодовите, табелите и белешките остануваат читливи во истиот тек.
NumberFormatter

Референца за `class.numberformatter.php` со подобрена типографија и навигација.

class.numberformatter.php

Класата NumberFormatter

Класата Collator

Вовед

Програмите складираат и работат со броеви користејќи бинарна репрезентација независна од локалот. При прикажување или печатење на број, тој се претвора во стринг специфичен за локалот. На пример, бројот 12345.67 е „12.345,67“ во САД, „12 345,67“ во Франција и „12.345,67“ во Германија.

Со повикување на методите обезбедени од класата NumberFormatter, можете да форматирате броеви, валути и проценти според наведениот или стандардниот локал. NumberFormatter е чувствителен на локалот, така што треба да креирате нов NumberFormatter за секој локал. Методите на NumberFormatter ги форматираат примитивните типови броеви, како што е double, и го прикажуваат бројот како стринг специфичен за локалот.

За валути, можете да користите тип на формат на валута за да креирате форматирач што враќа стринг со форматираниот број и соодветниот знак за валута. Се разбира, класата NumberFormatter не е свесна за девизните курсеви, така што излезот на бројот е ист без оглед на наведената валута. Ова значи дека истиот број има различни монетарни вредности во зависност од локалот на валутата. Ако бројот е 9988776.65, резултатите ќе бидат:

  • 9 988 776,65 € во Франција
  • 9.988.776,65 € во Германија
  • $9,988,776.65 in the United States

За да форматирате проценти, креирајте форматирач специфичен за локалот со тип на формат на процент. Со овој форматирач, децимален дел како 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_ISO;
public const int CURRENCY_PLURAL;
public const int CURRENCY_ACCOUNTING;
public const int CASH_CURRENCY;
public const int CURRENCY_STANDARD;
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_TOWARD_ZERO;
public const int ROUND_HALFEVEN;
public const int ROUND_HALFODD;
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 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 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 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 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 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 getAttribute(int $attribute): int|float|false
public getErrorCode(): int
public getSymbol(int $symbol): string|false
public getTextAttribute(int $attribute): string|false
public parse(string $string, int $type = NumberFormatter::TYPE_DOUBLE, int &$offset = null): int|float|false
public parseCurrency(string $string, string &$currency, int &$offset = null): 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 int
Децимален формат дефиниран со шема
NumberFormatter::DECIMAL int
Децимален формат
NumberFormatter::DECIMAL_COMPACT_SHORT int
Децимален формат изразен со компактна нотација (кратка форма), на пр. „23K“, „45B“. Достапно од PHP 8.5.0 и ICU 56.
NumberFormatter::DECIMAL_COMPACT_LONG int
Децимален формат изразен со компактна нотација (долга форма), на пр. „23 илјади“, „45 милијарди“. Достапно од PHP 8.5.0 и ICU 56.
NumberFormatter::CURRENCY int
Формат на валута
NumberFormatter::CURRENCY_ISO int
ISO формат на валута (на пр., „USD1.00“). Достапно од PHP 8.5.0.
NumberFormatter::CURRENCY_PLURAL int
Плурализиран формат на валута (на пр., „1.00 американски долар“ и „3.00 американски долари“). Достапно од PHP 8.5.0.
NumberFormatter::CASH_CURRENCY int
Currency symbol given CASH usage, e.g., "NT$3" instead of "NT$3.23". Available as of PHP 8.5.0 and ICU 54
NumberFormatter::CURRENCY_STANDARD int
Currency symbol, e.g., "$1.00", using non-accounting style for negative values (e.g. minus sign). Available as of PHP 8.5.0 and ICU 56.
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() and numfmt_parse().

NumberFormatter::TYPE_DEFAULT int
Изведи го типот од типот на променливата
NumberFormatter::TYPE_INT32 int
Форматирај/парсирај како 32-битен цел број
NumberFormatter::TYPE_INT64 int
Форматирај/парсирај како 64-битен цел број
NumberFormatter::TYPE_DOUBLE int
Форматирај/парсирај како вредност со пловечка запирка
NumberFormatter::TYPE_CURRENCY int
Форматирај/парсирај како вредност на валута. Застарено од PHP 8.3.0

Атрибути за формат на броеви

Атрибут за формат на броеви што го користи numfmt_get_attribute() and 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
Multiplier.
NumberFormatter::GROUPING_SIZE int
Децимални цифри.
NumberFormatter::ROUNDING_MODE int
Големина на групирање.
NumberFormatter::ROUNDING_INCREMENT int
Режим на заокружување.
NumberFormatter::FORMAT_WIDTH int
Зголемување на заокружувањето.
NumberFormatter::PADDING_POSITION int
Ширината до која ќе се додаде излезот од format().
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() and 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
Карактерот што се користи за пополнување до ширината на форматот.
NumberFormatter::DEFAULT_RULESET int
ISO код на валутата.
NumberFormatter::PUBLIC_RULESETS int
Стандарден сет на правила. Ова е достапно само со форматирање базирано на правила.

Јавни множества на правила. Ова е достапно само со форматирање базирано на правила. Ова е атрибут само за читање. Јавните множества на правила се враќаат како еден стринг, со имињата на секое множество правила разделени со ';' (точка и запирка).

Спецификатори на формат на симболи numfmt_get_symbol() and 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
Zero.
NumberFormatter::DIGIT_SYMBOL int
Знак за процент.
NumberFormatter::MINUS_SIGN_SYMBOL int
Карактер што претставува цифра во шемата.
NumberFormatter::PLUS_SIGN_SYMBOL int
Знак минус.
NumberFormatter::CURRENCY_SYMBOL int
Знак плус.
NumberFormatter::INTL_CURRENCY_SYMBOL int
Симбол на валута.
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
Симбол за бесконечност.
NumberFormatter::SIGNIFICANT_DIGIT_SYMBOL int
Симбол за „не е број“.
NumberFormatter::MONETARY_GROUPING_SEPARATOR_SYMBOL int
Симбол за значајна цифра.

Групен сепаратор за пари.

Режими на заокружување numfmt_get_attribute() and numfmt_set_attribute() with NumberFormatter::ROUNDING_MODE attribute.

NumberFormatter::ROUND_AWAY_FROM_ZERO
Псевдоним на NumberFormatter::ROUND_UP.
NumberFormatter::ROUND_CEILING int
Вредности на режимот на заокружување што се користат од
NumberFormatter::ROUND_DOWN int
Режим на заокружување за заокружување кон позитивна бесконечност.
NumberFormatter::ROUND_FLOOR int
Режим на заокружување за заокружување кон нула.
NumberFormatter::ROUND_HALFDOWN int
Режим на заокружување за заокружување кон негативна бесконечност.
NumberFormatter::ROUND_HALFEVEN int
Режим на заокружување за заокружување кон „најблискиот сосед“, освен ако двата соседи не се на еднакво растојание, во тој случај заокружи надолу.
NumberFormatter::ROUND_HALFODD
Режим на заокружување за заокружување кон „најблискиот сосед“, освен ако двата соседи не се на еднакво растојание, во тој случај заокружи кон парниот сосед.
NumberFormatter::ROUND_HALFUP int
Режим на заокружување за заокружување кон „непарниот сосед“.
NumberFormatter::ROUND_TOWARD_ZERO
Псевдоним на NumberFormatter::ROUND_DOWN.
NumberFormatter::ROUND_UP int
Режим на заокружување за заокружување кон „најблискиот сосед“, освен ако двата соседи не се на еднакво растојание, во тој случај заокружи нагоре.

Режим на заокружување за заокружување подалеку од нула.

Спецификатори за полнење numfmt_get_attribute() and numfmt_set_attribute() with NumberFormatter::PADDING_POSITION attribute.

NumberFormatter::PAD_AFTER_PREFIX int
Вредности на позицијата за полнење што се користат од
NumberFormatter::PAD_AFTER_SUFFIX int
Знаци за полнење вметнати по префиксот.
NumberFormatter::PAD_BEFORE_PREFIX int
Вметнати знаци за подлога пред префиксот.
NumberFormatter::PAD_BEFORE_SUFFIX int
Вметнати знаци за подлога пред суфиксот.

Дневник на промени

Верзија = NULL
8.5.0 Додадено NumberFormatter::DECIMAL_COMPACT_SHORT, NumberFormatter::DECIMAL_COMPACT_LONG, NumberFormatter::CURRENCY_ISO, NumberFormatter::CURRENCY_PLURAL, NumberFormatter::CASH_CURRENCY, NumberFormatter::CURRENCY_STANDARD.
8.4.0 Константите на класата сега се типизирани.

Содржина

Белешки од корисници 5 белешки

[email protected]
пред 15 години
this class seems to be painful: it is not, formatting and parsing are highly customizable, but what you probably need is really simple:

if you want to localize a number use:

<?php
$a = new \NumberFormatter("it-IT", \NumberFormatter::DECIMAL);
echo $a->format(12345.12345) . "<br>"; // outputs 12.345,12
$a->setAttribute(\NumberFormatter::MIN_FRACTION_DIGITS, 0);
$a->setAttribute(\NumberFormatter::MAX_FRACTION_DIGITS, 100); // by default some locales got max 2 fraction digits, that is probably not what you want
echo $a->format(12345.12345) . "<br>"; // outputs 12.345,12345
?>

if you want to print money use:

<?php
$a = new \NumberFormatter("it-IT", \NumberFormatter::CURRENCY);
echo $a->format(12345.12345) . "<br>"; // outputs €12.345,12
?>

if you have money data stored as (for example) US dollars and you want to print them using the it-IT notation, you need to use

<?php
$a = new \NumberFormatter("it-IT", \NumberFormatter::CURRENCY);
echo $a->formatCurrency(12345, "USD") . "<br>"; // outputs $ 12.345,00 and it is formatted using the italian notation (comma as decimal separator)
?>

another useful example about currency (how to obtain the currency name by a locale string):

<?php
$frontEndFormatter = new \NumberFormatter("it-IT", \NumberFormatter::CURRENCY);
$adminFormatter = new \NumberFormatter("en-US", \NumberFormatter::CURRENCY);
$symbol = $adminFormatter->getSymbol(\NumberFormatter::INTL_CURRENCY_SYMBOL); // got USD
echo $frontEndFormatter->formatCurrency(12345.12345,  $symbol) . "<br>";
?>
[email protected]
3 години пред
The NumberFormatter class can be used to convert integer numbers to Roman numerals without a custom function using an array of symbols and associated values:

<?php

function intToRomanNumeral(int $num) {
    static $nf = new NumberFormatter('@numbers=roman', NumberFormatter::DECIMAL);
    return $nf->format($num);
}

echo intToRomanNumeral(2); // II

echo intToRomanNumeral(5); // V

echo intToRomanNumeral(10); // X

echo intToRomanNumeral(50); // L

echo intToRomanNumeral(57); // LVII
echo intToRomanNumeral(58); // LVIII

echo intToRomanNumeral(100); // C

echo intToRomanNumeral(150); // CL

echo intToRomanNumeral(1000); // M

echo intToRomanNumeral(10000); // ↂ

?>
[email protected]
пред 5 години
Here's an example of how to use PATTERN_DECIMAL to print a number with two fraction digits, use () for negative numbers and pad to five characters to the left of the decimal point, using spaces as the padding character:

<?php

$fmt = new NumberFormatter("en-CA", NumberFormatter::PATTERN_DECIMAL, "* #####.00 ;(* #####.00)");
echo $fmt->format(-45.1);

// Outputs: "  (45.10)"

?>

Note that the ; in the pattern denotes the beginning of a subpattern, which is used for negative numbers. Hence the brackets around the pattern after the semicolon.
[email protected]
пред 15 години
Sample script to print number in English.

<?php
$f = new NumberFormatter("en", NumberFormatter::SPELLOUT);
echo $f->format(123456);

?>

Produces the result:
one hundred twenty-three thousand four hundred fifty-six
Einenlum
пред 2 години
Be aware that (at least with the locale 'fr-FR') NumberFormatter doesn't use spaces. It doesn't even use non breakable spaces (NBSP). It uses narrow non breakable spaces (NNBSP). This broke my tests.

<?php

$formatter = new NumberFormatter(
    'fr-FR',
    NumberFormatter::DEFAULT_STYLE
);

$value = $formatter->format(100_000); // '100 000'

// If you want to replace narrow non breakable spaces with non breakable spaces:

str_replace("\u{202F}", "\u{00A0}", $value);

// If you want to replace it with a normal space

str_replace("\u{202F}", " ", $value);
На оваа страница

Автоматски outline од активната документација.

Насловите ќе се појават тука по вчитување.

Попрегледно читање

Примерите, changelog табелите и user notes се визуелно издвоени за да не се губат во долгата содржина.

Брз совет Користи го outline-от Скокни директно на главните секции од активната страница.
Извор Оригиналниот линк останува достапен Кога ти треба целосен upstream context, отвори го PHP.net во нов tab.