Строковые значения суммируемых узлов преобразовываются в числовой формат так же, как они преобразовывались бы функцией number
. Например, если входящий документ будет иметь вид
1
3
five
7
9
то на выходе мы получим
1
4
NaN
NaN
NaN
потому что, начиная с третьего элемента, в суммировании будет участвовать значение number('five')
, то есть не-число ( NaN
).
number floor( number )
number ceiling( number )
Функции floor
и ceiling
(англ. пол и потолок соответственно) осуществляют округление численного аргумента до ближайшего не большего и ближайшего не меньшего целого соответственно.
Примеры
floor(2.3)
→ 2
ceiling(2.3)
→ 3
floor(-2.3)
→ -3
ceiling(-2.3)
→ -2
floor(-1 div 0)
→ -Infinity
ceiling(-1 div 0)
→ -Infinity
floor('zero')
→ NaN
ceiling(-1 div (-1 div 0))
→ 0
number round( number )
Функция round
округляет число до ближайшего целого значения. У этой функции есть несколько нюансов, которые мы сейчас разберем.
□ Если дробная часть числа равна 0.5, то функция вернет ближайшее большее целое.
□ Если аргумент является не-числом (NaN), то результат также будет NaN.
□ Если аргумент является положительной или отрицательной бесконечностью, то результатом будет тоже положительная или отрицательная бесконечность, то есть аргумент не изменится.
□ Если аргумент является положительным или отрицательным нулем, результатом будет также положительный или отрицательный нуль, то есть аргумент не изменится.
□ Если аргумент меньше нуля, но больше или равен — 0.5, результатом будет отрицательный нуль.
Примеры
round(2.5)
→ 3
round(2.49)
→ 2
round(-1.7)
→ -2
1 div round(0.5)
→ Infinity
1 div round(-0.5)
→ -Infinity
round(1 div 0)
→ Infinity
round('one')
→ NaN
string string( object ?)
Подобно функциям boolean
и number
, функция string
преобразует свой аргумент к строковому типу явным образом. Если аргумент опущен, функции передается множество узлов, состоящее из единственного контекстного узла.
Напомним вкратце правила приведения других типов к строке.
□ Булевые значения преобразуются в строку следующим образом:
• "истина" ( true
) преобразуется в строку " true
";
• "ложь" ( false
) преобразуется в строку " false
".
□ Числа преобразуются к строковому виду следующим образом:
• не-число ( NaN
) преобразуется в строку " NaN
";
• положительный нуль преобразуется в строку " 0
";
• отрицательный нуль преобразуется в строку " 0
";
• положительная бесконечность преобразуется в строку " Infinity
";
• отрицательная бесконечность преобразуется в строку " -Infinity
";
• положительные целые преобразуются в свое десятичное представление без ведущих нулей и без точки (" .
"), отделяющей дробную часть от целой;
• отрицательные целые преобразуются так же, как и положительные, но с начальным знаком "минус" (" -
");
• остальные числа преобразуются в десятичное представление с использованием точки (" .
"), отделяющей целую часть от дробной части; целая часть не содержит ведущих нулей (кроме случая с числами в интервале (-1;1)), дробная часть содержит столько цифр, сколько требуется для точного представления числа.
□ Множество узлов преобразуется в строковое значение своего первого в порядке просмотра документа узла. Если множество пусто, функция возвращает пустую строку.
□ Объекты других типов преобразуются в строку в соответствии с собственными правилами. Например, результирующий фрагмент дерева преобразуется в конкатенацию всех своих строковых узлов.
Примеры
string(boolean(0))
→ false
string(number('zero'))
→ NaN
string(number('.50000'))
→ 0.5
string(number(00500.))
→ 500
Для строкового форматирования чисел рекомендуется использовать функцию XSLT format-number
совместно с элементом xsl:decimal-format
.
string concat( string , string , string *)
Функция concat
принимает на вход две или более строки и возвращает конкатенацию (строковое сложение) своих аргументов.
Читать дальше