Строковые значения суммируемых узлов преобразовываются в числовой формат так же, как они преобразовывались бы функцией 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принимает на вход две или более строки и возвращает конкатенацию (строковое сложение) своих аргументов.
Читать дальше