Saltar al contenido principal

decimal-format

El elemento decimal-format permite definir los caracteres y símbolos utilizados para convertir números en cadenas de texto mediante el uso de la función format-number().

Se trata de un elemento de nivel superior. Por lo tanto, tiene que aparecer como hijo directo del elemento stylesheet o del elemento transform.

La estructura de este elemento es la siguiente:

<xsl:decimal-format 
name="string"
decimal-separator="char"
grouping-separator="char"
infinity="string"
minus-sign="char"
NaN="string"
percent="char"
per-mille="char"
zero-digit="char"
digit="char"
pattern-separator="char"
/>

Donde:

  • name especifica el nombre del formato.
  • decimal-separator permite especificar el caracter con el que se separan los decimales. Por defecto, es el punto (.).
  • grouping-separator permite especificar el caracter mediante el cual se separan lo miles. Por defecto, es la coma (,).
  • infinity permite especificar la cadena utilizada para representar el infinito. Por defecto, su valor es Infinity.
  • minus-sign permite especificar el caracter utilizado para indicar números negativos. Por defecto, es el guión medio (-).
  • NaN indica la cadena utilizada cuando el valor no es un número.
  • percent define el caracter utilizado para indicar porcentajes. Por defecto, es %.
  • per-mille define el caracter utilizado para indicar tanto por miles.
  • zero-digit define el caracter cero. Por defecto, es 0.
  • digit indica el caracter utilizado cuando se quiere reflejar el lugar en el que falta un dígito. Por defecto, es #.
  • pattern-separator especifica el caracter utilizado para separar supatrones positivos y negativos dentro de un formato de patrones. Por defecto, es el punto y coma (;).

Todos los atributos son optativos.

La función format-number() recibe tres parámetros:

format-number(number,format,[decimalformat])

Donde:

  • number es el valor a formatear.
  • format es el formato que se debe aplicar al número.
  • decimalformat es el nombre del elemento decimal-format del cual se debe obtener la configuración. Es un parámetro opcional.

Un ejemplo de su uso se puede ver a continuación:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:decimal-format name="euro" decimal-separator="," grouping-separator="."/>
<xsl:template match="/">
<xsl:value-of select="format-number(26825.8, '#.###,00', 'euro')"/>
</xsl:template>
</xsl:stylesheet>

En el ejemplo anterior, se muestra como formatear la divisa europea.

Un ejemplo completo de su uso sería el siguiente:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:decimal-format decimal-separator="," grouping-separator="."/>
<xsl:template match="/">
<html>
<body>
<h2>Colección de música</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Título</th>
<th>Artista</th>
<th>Precio</th>
</tr>
<xsl:for-each select="catalogo/cd">
<tr>
<td><xsl:value-of select="titulo"/></td>
<td><xsl:value-of select="artista"/></td>
<td><xsl:value-of select="format-number(precio, '#.##0,00 EUR')"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

Consideremos que tenemos el siguiente documento XML:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="hoja.xsl"?>
<catalogo>
<cd>
<titulo>Thriller</titulo>
<artista>Michael Jackson</artista>
<precio>1300</precio>
</cd>
<cd>
<titulo>The Wall</titulo>
<artista>Pink Floyd</artista>
<precio>109.5</precio>
</cd>
<cd>
<titulo>Abbey Road</titulo>
<artista>The Beatles</artista>
<precio>514.95</precio>
</cd>
</catalogo>

En ese caso, la transformación XSLT daría como resultado un documento HTML:

<!DOCTYPE html>
<html>
<body>
<h2>Colección de música</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Título</th>
<th>Artista</th>
<th>Precio</th>
</tr>
<tr>
<td>Thriller</td>
<td>Michael Jackson</td>
<td>1.300,00 EUR</td>
</tr>
<tr>
<td>The Wall</td>
<td>Pink Floyd</td>
<td>109,50 EUR</td>
</tr>
<tr>
<td>Abbey Road</td>
<td>The Beatles</td>
<td>514,95 EUR</td>
</tr>
</table>
</body>
</html>

El documento HTML se visualizaría de la siguiente manera:

Probar en el navegador