Книга: XSLT
format-number()
format-number()
Как можно догадаться по имени, функция format-number()
служит для форматирования чисел с преобразованием их в строки. Она применяется так:
string format-number(number, format, name?)
Функция возвращает форматируемое число в виде строки. Функции передаются число number
, которое нужно отформатировать, строка форматирования format
и необязательный параметр-строка name
. Строка name — это имя QName
, задающее формат так, как он создается элементом <xsl:decimal-format>
(который будет рассмотрен в конце этой главы).
Форматирующая строка format
должна соответствовать соглашениям класса Java DecimalFormat
.
КЛАСС JAVA DECIMALFORMAT
На момент написания книги документация для класса Java DecimalFormat находится в Интернете по адресу: http://java.sun.com/products/jdk/1.1/docs/api/java.text.DecimalFormat.html.
Форматирующая строка (format string) состоит из следующих частей:
• format-string:= subpattern (;subpattern)?
• subpattern:= prefix? integer (.fraction)?suffix?
• prefix:= [#x0..#xFFFD] - specialCharacters
• suffix:= [#x0..#xFFFD] - specialCharacters
• integer:= '#'* '0'* '0'
• fraction:= '0'* '#'*
Далее показаны специальные символы (specialCharacters
), которые можно использовать в подчиненных образцах, subpattern
(эти символы можно изменить при помощи элемента <xsl:decimal-format>
, который будет рассмотрен в конце этой главы):
• 0
— на этом месте всегда должна стоять цифра;
• #
— цифра, если только это не избыточный лидирующий или завершающий ноль;
• .
— разделитель десятичной части;
• ,
— разделитель групп разрядов;
• ; — разделяет форматы;
• -
— знак минуса;
• %
— умножить на 100 и показать как проценты;
• ‰
— умножить на 1000 и показать в тысячных частях;
• Е
— разделяет мантиссу и экспоненциальную часть;
• ¤
— символ валюты (#xA4);
• '
— заключает в кавычки специальные символы.
Следующий пример (листинг 8.5) демонстрирует работу функции. Я форматирую значения из planets.xml
, отображаемые в таблице HTML.
Листинг 8.5. Форматирование чисел
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/PLANETS">
.
.
.
</xsl:template>
<xsl:template match="PLANET">
<TR>
<TD><xsl:value-of select="NAME"/></TD>
<TD><xsl:apply-templates select="MASS"/></TD>
<TD><xsl:apply-templates select="RADIUS"/></TD>
<TD><xsl:apply-templates select="DAY"/></TD>
</TR>
</xsl:template>
<xsl:template match="MASS">
<xsl:value-of select="format-number(., '#.###')"/>
<xsl:text> </xsl:text>
<xsl:value-of select="@UNITS"/>
</xsl:template>
<xsl:template match="RADIUS">
<xsl:value-of select="format-number(., '#.###')"/>
<xsl:text> </xsl:text>
<xsl:value-of select="@UNITS"/>
</xsl:template>
<xsl:template match="DAY">
<xsl:value-of select="format-number(., '###.#')"/>
<xsl:text> </xsl:text>
<xsl:value-of select="@UNITS"/>
</xsl:template>
</xsl:stylesheet>
Вот результат, в котором выведены отформатированные числа:
<HTML>
<HEAD>
<TITLE>
The Formatted Planets Table
</TITLE>
</HEAD>
<BODY>
<H1>
The Formatted Planets Table
</H1>
<TABLE BORDER="2">
<TR>
<TD>Name</TD>
<TD>Mass</TD>
<TD>Radius</TD>
<TD>Day</TD>
</TR>
<TR>
<TD>Mercury</TD>
<TD>0.055 (Earth = 1)</TD>
<TD>1.516 miles</TD>
<TD>58.65 days</TD>
</TR>
<TR>
<TD>Venus</TD>
<TD>0.815 (Earth = 1)</TD>
<TD>3.716 miles</TD>
<TD>116.75 days</TD>
</TR>
<TR>
<TD>Earth</TD>
<TD>1 (Earth = 1)</TD>
<TD>2.107 miles</TD>
<TD>1 days</TD>
</TR>
</TABLE>
</BODY>
</HTML>
Этот результирующий документ показан на рис. 8.1. (MSXML3 и Saxon отбрасывают лидирующие нули, поэтому 0.055 выводится как .055 и т.д.)
Рис. 8.1. Форматирование чисел при помощи XSLT
Следующие примеры демонстрируют способы применения форматирующих строк. Заметьте, что при помощи точки с запятой (;) можно отделять образцы для положительных и отрицательных чисел.
Число | Форматирующая строка | Результат |
---|---|---|
4567 | #,### | 4,567 |
4567.8 | ####.# | 4567.8 |
4567.8 | #,##0.00 | 4,567.80 |
456.789 | #,##0.00 | 456.79 |
4567890 | #,##0.00 | 4,567,890.00 |
4567 | ###0.0### | 4567.0 |
.00045 | ##0.0### | 0.0005 |
.45 | #00% | 45% |
-4.56 | #.00;(#.00) | (4.56) |
-45 | #,##0.00 | -45 |
- Common Configuration Information
- Configure User Information
- Функция format-number
- Sequence number
- Information request
- SCTP Generic header format
- 5.2.3. Действия с объектами Numbers
- 2.3 Executable and Linking Format
- На всех дисках моего компьютера есть папка System Volume Information. Для чего она нужна?
- fdformat
- Convection Currents of Information
- Working with Graphics Formats