Como dar formato a un número en xslt: format-number

Para los que o bien nos guste, o bien nos vemos obligados a usar transformadas xslt a veces en exceso, muchas veces nos encontramos con algunos problemas como son los números. Cuando debemos de hacer operaciones que van mas allá de sumar y restar dentro de una transformada xslt, nos encontramos muchas veces con un gran problema al mostrar los resultados de las operaciones. Por ejemplo, un caso practico (el mio de hoy, aunque me pasa desde que empecé a trabajar con xslt), ha sido que tengo que mostrar un combo (select) con maletas, pero cuando el trayecto es español, como no, al precio de esas maletas (incluido en el combo) hay que añadir un 7% de iva. Al proceder a esto, muchas veces me aparecen números que son auténticos chorizos, por ejemplo 37.000000004€, por lo que queda un poco feo en un combo. La solución es dar formato al numero/variable y dejarlo truncado a 2 decimales.

Para dar formato a un numero en una transformada xslt, podemos utilizar la función nativa de xslt format-number. Esta función cuenta con 2 parámetros, un primero que especificamos el numero a dar formato y como segundo parámetro que especifica cual sera el formato que se le dará al numero. La función tendría un formato tal que:

/**
 * Función de xslt nativa e independiente del lenguaje, ya sea java, .Net, php, etc. para dar formato a un numero desde XSLT
 * pero a veces puede provocar algún que otro fallo dependiendo del lenguaje que la implementa.
 * @param number Numero a dar formato
 * @param format Formato que se le dará, se utilizan los caracteres ('0', '#', '.', ',', '%')
 * @return Numero con su formato especificado
 */
string format-number(string number, string format)


Para dar formato, podemos utilizar los siguientes caracteres:

  • ‘0’: Los ceros, indican dígitos obligatorios, ignorando los ceros a la izquierda o derecha si son en la parte entera o decimal. Si por ejemplo tenemos el 34 y le aplicamos como formato 0000, nos quedaría tal que 0034. Lo mismo ocurre con los decimales, si tenemos nuevamente 34, el resultado de aplicar 0000.00 seria 0034.00.
  • ‘#’: La almohadilla (#), sirve para dar formato a los dígitos ignorando los ceros innecesarios. Por ejemplo, si tenemos el 0034 y el 0034.0500 y le aplicamos el formato #.#, nos dará como resultado 34 en primer lugar y 34.1 en segundo lugar. OJO, que redondea los números, si pusiéramos al 0034.0500 dos almohadillas tal que #.##, quedaría 34.05. Tener en cuenta, además de que redondea los números, que ignorara todos los ceros que haya después de la posición que ocuparía la almohadilla, a diferencia del ‘0’, que mantendría esos ceros.
  • ‘.’: El punto se utiliza para establecer el limitador decimal, para diferenciar entre la parte entera y la decimal.
  • ‘,’: La coma se utiliza para indicar si queremos y donde queremos situar los separadores de miles, por ejemplo, si tenemos 1000 y le aplicamos un formato tal que # o ####, el resultado siempre sera 1000, pero si aplicamos el formato #,### nos quedara 1,000, que manteniendo el formato y pasando 12350, quedaría 12,350 como resultado.
  • ‘%’: Devuelve el resultado en %, como pasa en otros programas como el Excel, cuando le aplicamos el %, nos multiplicara por 100 y mantendrá el símbolo de porcentaje al final, tal que 7 con formato #% quedaría 700% como resultado.
  • Espero que os sirva tanto a vosotros como a mi.