format-number()¶
Функция format-number
принимает на вход три параметра. Первым параметром является число, которое необходимо преобразовать в строку, применив при этом форматирование. Вторым параметром является образец, в соответствии с которым будет форматироваться число. Третий параметр указывает название десятичного формата, который следует применять.
Синтаксис¶
1 |
|
Описание и примеры¶
Образец форматирования в XSLT определяется точно так же, как в классе DecimalFormat
языка Java. Для того чтобы читателю, не знакомому с Java, не пришлось изучать документацию этого языка, мы приведем полный синтаксис образцов форматирования. Продукции образца форматирования мы будем помечать номерами с префиксом NF, чтобы не путать их с другими продукциями.
Прежде всего, образец форматирования может состоять из двух частей: первая часть определяет форматирование положительного числа, вторая часть — отрицательного. Запишем это в виде EBNF-продукции:
1 |
|
Двум частям образца форматирования соответствуют нетерминалы NFSubpattern
, которые разделены нетерминалом NFSubpatternDelim
.
В случае если вторая часть образца форматирования опущена, отрицательные числа форматируются точно так же, как и положительные, но им предшествует префикс отрицательного числа (по умолчанию — знак "минус", "-
").
Примеры¶
1 2 3 |
|
Каждая из частей образца форматирования состоит из префикса (NFPrefix
), целой части (NFInteger
), необязательной дробной части (NFFractional
) и суффикса (NFSuffix
).
1 |
|
Префикс или суффикс образца форматирования могут содержать символ процента. Если суффикс содержит символ процента, число должно быть умножено на 100
и выведено со знаком процента. Наличие символа процента в префиксе на форматирование не влияет.
Пример 1¶
1 2 3 4 |
|
Префикс задает строку, которая будет предшествовать числу, это может быть последовательность любых неформатирующих символов (NFChar
) плюс символ процента (NFPercent
). Аналогично, суффикс будет следовать за числом, и он тоже не может содержать форматирующих символов (за исключением символа процента).
1 2 |
|
Пример 2¶
Если мы хотим заключить наше число, к примеру, в квадратные скобки, мы должны будем включить в его образец форматирования префикс "[
" и суффикс "]
":
1 |
|
Нетерминал NFinteger
определяет, как будет выглядеть целая часть числа. Он начинается несколькими символами NFOptDigit
(по умолчанию "#
"), показывающими позиции, в которых цифры необязательны, и состоит из символов NFReqDigit
(по умолчанию "0
"), показывающих позиции обязательных цифр, а также символа NFGroupDelim
(по умолчанию ",
"), показывающего позицию символа-разделителя групп цифр.
1 2 3 4 |
|
Пример 3¶
1 2 3 4 |
|
Замечание. Некоторые процессоры позволяют указывать несколько символов-разделителей. Однако даже в этом случае они учитывают только последний из этих символов.
Пример 4¶
1 |
|
Дробная часть числа, представленная нетерминалом NFFraction
, начинается символом-разделителем целой и дробной части NFFractionDelim
(по умолчанию ".
"), продолжается последовательностью символов обязательных позиций цифр NFReqDigit
и заканчивается последовательностью символов необязательных позиций NFOptDigit
:
1 |
|
Пример 5¶
1 2 3 |
|
Продукция NFChar
, использующаяся при определении префикса (NFPrefix
) и суффикса (NFSuffix
), может содержать любые неформатирующие символы:
1 |
|
К специальным форматирующим символам относятся следующие:
- символ обязательной позиции цифры (по умолчанию "0");
- символ необязательной позиции цифры (по умолчанию "#");
- символ-разделитель образцов форматирования для положительного и отрицательного числа (по умолчанию ";");
- символ-разделитель целой и дробной части (по умолчанию ".");
- символ процента (по умолчанию "%").
Перечислим их продукции:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
Синтаксические правила, которые мы привели выше, пока не являются стандартными. Они корректно передают синтаксис образца форматирования, но являются более строгими, чем определения в документации языка Java.
Ссылки¶
- format-number() MDN (рус.)