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 function __construct(string $locale, int $style, ?string $pattern = null)
public static function create(string $locale, int $style, ?string $pattern = null): ?NumberFormatter
public function format(int|float $num, int $type = NumberFormatter::TYPE_DEFAULT): string|false
public function formatCurrency(float $amount, string $currency): string|false
public function getAttribute(int $attribute): int|float|false
public function getErrorCode(): int
public function getErrorMessage(): string
public function getLocale(int $type = ULOC_ACTUAL_LOCALE): string|false
public function getPattern(): string|false
public function getSymbol(int $symbol): string|false
public function getTextAttribute(int $attribute): string|false
public function parse(string $string, int $type = NumberFormatter::TYPE_DOUBLE, int &$offset = null): int|float|false
public function parseCurrency(string $string, string &$currency, int &$offset = null): float|false
public function setAttribute(int $attribute, int|float $value): bool
public function setPattern(string $pattern): bool
public function setSymbol(int $symbol, string $value): bool
public function 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
Еденлум
пред 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.