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>";
?>NumberFormatter
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
NumberFormatter
Референца за `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%.
За посложени форматирања, како што се броеви напишани со зборови, се користат форматирачи на броеви базирани на правила.
Синопсис на класата
Претходно дефинирани константи
Типови на форматирање
Овие стилови се користат од numfmt_create() за да се дефинира типот на форматирачот.
-
NumberFormatter::PATTERN_DECIMALint - Децимален формат дефиниран со шема
-
NumberFormatter::DECIMALint - Децимален формат
-
NumberFormatter::DECIMAL_COMPACT_SHORTint - Децимален формат изразен со компактна нотација (кратка форма), на пр. „23K“, „45B“. Достапно од PHP 8.5.0 и ICU 56.
-
NumberFormatter::DECIMAL_COMPACT_LONGint - Децимален формат изразен со компактна нотација (долга форма), на пр. „23 илјади“, „45 милијарди“. Достапно од PHP 8.5.0 и ICU 56.
-
NumberFormatter::CURRENCYint - Формат на валута
-
NumberFormatter::CURRENCY_ISOint - ISO формат на валута (на пр., „USD1.00“). Достапно од PHP 8.5.0.
-
NumberFormatter::CURRENCY_PLURALint - Плурализиран формат на валута (на пр., „1.00 американски долар“ и „3.00 американски долари“). Достапно од PHP 8.5.0.
-
NumberFormatter::CASH_CURRENCYint - 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_STANDARDint - 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::PERCENTint - Формат на процент
-
NumberFormatter::SCIENTIFICint - Научен формат
-
NumberFormatter::SPELLOUTint - Формат базиран на правила за изговарање
-
NumberFormatter::ORDINALint - Формат базиран на правила за редни броеви
-
NumberFormatter::DURATIONint - Формат базиран на правила за времетраење
-
NumberFormatter::PATTERN_RULEBASEDint - Формат базиран на правила дефиниран со шема
-
NumberFormatter::CURRENCY_ACCOUNTINGint -
Формат на валута за сметководство, на пр.
($3.00)за негативна сума на валута наместо-$3.00. Достапно од PHP 7.4.1 и ICU 53. -
NumberFormatter::DEFAULT_STYLEint - Стандарден формат за локалот
-
NumberFormatter::IGNOREint - Алијас за PATTERN_DECIMAL
Спецификатори за формат на броеви
Овие константи дефинираат како броевите се парсираат или форматираат. Треба да се користат како аргументи за numfmt_format() and numfmt_parse().
-
NumberFormatter::TYPE_DEFAULTint - Изведи го типот од типот на променливата
-
NumberFormatter::TYPE_INT32int - Форматирај/парсирај како 32-битен цел број
-
NumberFormatter::TYPE_INT64int - Форматирај/парсирај како 64-битен цел број
-
NumberFormatter::TYPE_DOUBLEint - Форматирај/парсирај како вредност со пловечка запирка
-
NumberFormatter::TYPE_CURRENCYint - Форматирај/парсирај како вредност на валута. Застарено од PHP 8.3.0
Атрибути за формат на броеви
Атрибут за формат на броеви што го користи numfmt_get_attribute() and numfmt_set_attribute().
-
NumberFormatter::PARSE_INT_ONLYint - Парсирај само цели броеви.
-
NumberFormatter::GROUPING_USEDint - Користи сепаратор за групирање.
-
NumberFormatter::DECIMAL_ALWAYS_SHOWNint - Секогаш прикажувај децимална точка.
-
NumberFormatter::MAX_INTEGER_DIGITSint - Секогаш прикажувај децимална точка.
-
NumberFormatter::MIN_INTEGER_DIGITSint - Максимален број на цели цифри.
-
NumberFormatter::INTEGER_DIGITSint - Минимален број на цели цифри.
-
NumberFormatter::MAX_FRACTION_DIGITSint - Цели цифри.
-
NumberFormatter::MIN_FRACTION_DIGITSint - Максимален број на децимални цифри.
-
NumberFormatter::FRACTION_DIGITSint - Минимален број на децимални цифри.
-
NumberFormatter::MULTIPLIERint - Multiplier.
-
NumberFormatter::GROUPING_SIZEint - Децимални цифри.
-
NumberFormatter::ROUNDING_MODEint - Големина на групирање.
-
NumberFormatter::ROUNDING_INCREMENTint - Режим на заокружување.
-
NumberFormatter::FORMAT_WIDTHint - Зголемување на заокружувањето.
-
NumberFormatter::PADDING_POSITIONint - Ширината до која ќе се додаде излезот од format().
-
NumberFormatter::SECONDARY_GROUPING_SIZEint - Позицијата на која ќе се додаде дополнувањето. Погледнете ги константите за позиција на дополнување за можни вредности на аргументите.
-
NumberFormatter::SIGNIFICANT_DIGITS_USEDint - Големина на секундарно групирање.
-
NumberFormatter::MIN_SIGNIFICANT_DIGITSint - Користи значајни цифри.
-
NumberFormatter::MAX_SIGNIFICANT_DIGITSint - Минимален број на значајни цифри.
-
NumberFormatter::LENIENT_PARSEint - Максимален број на значајни цифри.
Режим на попустливо парсирање што го користат форматите базирани на правила.
Атрибути на текст за формат на број numfmt_get_text_attribute() and numfmt_set_text_attribute().
-
NumberFormatter::POSITIVE_PREFIXint - Атрибут на текст за формат на број што го користи
-
NumberFormatter::POSITIVE_SUFFIXint - Позитивен суфикс.
-
NumberFormatter::NEGATIVE_PREFIXint - Позитивен суфикс.
-
NumberFormatter::NEGATIVE_SUFFIXint - Негативен префикс.
-
NumberFormatter::PADDING_CHARACTERint - Негативен суфикс.
-
NumberFormatter::CURRENCY_CODEint - Карактерот што се користи за пополнување до ширината на форматот.
-
NumberFormatter::DEFAULT_RULESETint - ISO код на валутата.
-
NumberFormatter::PUBLIC_RULESETSint - Стандарден сет на правила. Ова е достапно само со форматирање базирано на правила.
Јавни множества на правила. Ова е достапно само со форматирање базирано на правила. Ова е атрибут само за читање. Јавните множества на правила се враќаат како еден стринг, со имињата на секое множество правила разделени со ';' (точка и запирка).
Спецификатори на формат на симболи numfmt_get_symbol() and numfmt_set_symbol().
-
NumberFormatter::DECIMAL_SEPARATOR_SYMBOLint - Симболи за формат на броеви што ги користи
-
NumberFormatter::GROUPING_SEPARATOR_SYMBOLint - Децимален сепаратор.
-
NumberFormatter::PATTERN_SEPARATOR_SYMBOLint - Групен сепаратор.
-
NumberFormatter::PERCENT_SYMBOLint - Сепаратор на шема.
-
NumberFormatter::ZERO_DIGIT_SYMBOLint - Zero.
-
NumberFormatter::DIGIT_SYMBOLint - Знак за процент.
-
NumberFormatter::MINUS_SIGN_SYMBOLint - Карактер што претставува цифра во шемата.
-
NumberFormatter::PLUS_SIGN_SYMBOLint - Знак минус.
-
NumberFormatter::CURRENCY_SYMBOLint - Знак плус.
-
NumberFormatter::INTL_CURRENCY_SYMBOLint - Симбол на валута.
-
NumberFormatter::MONETARY_SEPARATOR_SYMBOLint - Меѓународен симбол на валута.
-
NumberFormatter::EXPONENTIAL_SYMBOLint - Монетарен сепаратор.
-
NumberFormatter::PERMILL_SYMBOLint - Симбол за пер мил.
-
NumberFormatter::PAD_ESCAPE_SYMBOLint - Симбол за промили.
-
NumberFormatter::INFINITY_SYMBOLint - Симбол за бегство од празно место.
-
NumberFormatter::NAN_SYMBOLint - Симбол за бесконечност.
-
NumberFormatter::SIGNIFICANT_DIGIT_SYMBOLint - Симбол за „не е број“.
-
NumberFormatter::MONETARY_GROUPING_SEPARATOR_SYMBOLint - Симбол за значајна цифра.
Групен сепаратор за пари.
Режими на заокружување numfmt_get_attribute()
and numfmt_set_attribute() with
NumberFormatter::ROUNDING_MODE attribute.
-
NumberFormatter::ROUND_AWAY_FROM_ZERO -
Псевдоним на
NumberFormatter::ROUND_UP. -
NumberFormatter::ROUND_CEILINGint - Вредности на режимот на заокружување што се користат од
-
NumberFormatter::ROUND_DOWNint - Режим на заокружување за заокружување кон позитивна бесконечност.
-
NumberFormatter::ROUND_FLOORint - Режим на заокружување за заокружување кон нула.
-
NumberFormatter::ROUND_HALFDOWNint - Режим на заокружување за заокружување кон негативна бесконечност.
-
NumberFormatter::ROUND_HALFEVENint - Режим на заокружување за заокружување кон „најблискиот сосед“, освен ако двата соседи не се на еднакво растојание, во тој случај заокружи надолу.
-
NumberFormatter::ROUND_HALFODD - Режим на заокружување за заокружување кон „најблискиот сосед“, освен ако двата соседи не се на еднакво растојание, во тој случај заокружи кон парниот сосед.
-
NumberFormatter::ROUND_HALFUPint - Режим на заокружување за заокружување кон „непарниот сосед“.
-
NumberFormatter::ROUND_TOWARD_ZERO -
Псевдоним на
NumberFormatter::ROUND_DOWN. -
NumberFormatter::ROUND_UPint - Режим на заокружување за заокружување кон „најблискиот сосед“, освен ако двата соседи не се на еднакво растојание, во тој случај заокружи нагоре.
Режим на заокружување за заокружување подалеку од нула.
Спецификатори за полнење numfmt_get_attribute()
and numfmt_set_attribute() with
NumberFormatter::PADDING_POSITION attribute.
-
NumberFormatter::PAD_AFTER_PREFIXint - Вредности на позицијата за полнење што се користат од
-
NumberFormatter::PAD_AFTER_SUFFIXint - Знаци за полнење вметнати по префиксот.
-
NumberFormatter::PAD_BEFORE_PREFIXint - Вметнати знаци за подлога пред префиксот.
-
NumberFormatter::PAD_BEFORE_SUFFIXint - Вметнати знаци за подлога пред суфиксот.
Види Исто така
Дневник на промени
| Верзија | = 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 | Константите на класата сега се типизирани. |
Содржина
- NumberFormatter::create — Создади форматирач на броеви
- NumberFormatter::format — Форматирај број
- NumberFormatter::formatCurrency — Форматирај валутна вредност
- NumberFormatter::getAttribute — Земи атрибут
- NumberFormatter::getErrorCode — Земи код за последна грешка на форматирачот
- NumberFormatter::getErrorMessage — Земи порака за последна грешка на форматирачот
- NumberFormatter::getLocale — Земи локал на форматирачот
- NumberFormatter::getPattern — Земи шема на форматирачот
- NumberFormatter::getSymbol — Земи вредност на симбол
- NumberFormatter::getTextAttribute — Земи текстуален атрибут
- NumberFormatter::parse — Парсирај број
- NumberFormatter::parseCurrency — Парсирај валутен број
- NumberFormatter::setAttribute — Постави атрибут
- NumberFormatter::setPattern — Постави шема на форматирачот
- NumberFormatter::setSymbol — Постави вредност на симбол
- NumberFormatter::setTextAttribute — Постави текстуален атрибут
Белешки од корисници 5 белешки
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); // ↂ
?>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.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-sixBe 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);