XSL-Übersicht / xsl:decimal-format

xsl:decimal-format

xsl:decimal-format

xsl:decimal-format erlaubt eine benutzerdefinierte Zahlen-Formatierung: Für Dezimaltrenner (z.B. Komma) und Gruppierungszeichen (z.B. Punkt) können Sonderzeichen festgelegt werden (z.B. 1.234.567,89), die vom Standardwert (z.B. 1,234,567.89) abweichen. xsl:decimal-format kommt optional zum Einsatz in der XPath-Funktion format-number.

Die XPath-Funktion format-number erwartet mindestens zwei, optional drei Parameter. Der erste Parameter muss aus einer Zahl bestehen, der zweite Parameter ist ein Pattern zur formatierten Darstellung dieser Zahl. So ergibt der Aufruf dieses Templates


 <xsl:template match="/">
  <ergebnis>
   <xsl:for-each select="-10000001, -1001, -100, -11, -9, 
                         0, 9, 10, 99, 100, 999, 1000, 10000001">
    <wert>
     <xsl:value-of select="format-number(., '#,##0.00')"/>
    </wert>
   </xsl:for-each>
  </ergebnis>
 </xsl:template>

... dieses Ergebnis:


<ergebnis>
  <wert>-10,000,001.00</wert>
  <wert>-1,001.00</wert>
  <wert>-100.00</wert>
  <wert>-11.00</wert>
  <wert>-9.00</wert>
  <wert>0.00</wert>
  <wert>9.00</wert>
  <wert>10.00</wert>
  <wert>99.00</wert>
  <wert>100.00</wert>
  <wert>999.00</wert>
  <wert>1,000.00</wert>
  <wert>10,000,001.00</wert>
</ergebnis>
decimal-separator stellt den Dezimaltrenner zwischen Vor- und Nachkommastellen dar. Default-Wert: der Punkt ".". Beispiel: 1234.56
digit ist ein Platzhalter für Zeichen, die (im Gegensatz zur 0 als zero-digit-Platzhalter) nur bei Bedarf verwendet werden. Ist das Pattern '0.000,00', so wird die Zahl '12.6' als '0.012,60' ausgegeben. Bei Verwendung des Patters '#.##0,00' erscheint die Zahl als '12,60'. Der Default-Wert ist "#".
grouping-separator stellt den Gruppierungs-Trenner dar, etwa in der Tausendergruppierung. Default-Wert: Komma ",". Beispiel: 1,234,567
minus-sign wird bei einer negativen Zahl verwendet. Default-Wert ist das Minuszeichen "-".
name hier kann der xsl:decimal-format benannt werden, sodass er in der format-number-Funktion verwendet werden kann. Beispiel: format-number(., '#.##0,00', 'df'). Dann muss das Pattern ('#.##0,00') aber auch zu den Definitionen des xsl:decimal-format passen.
pattern-separator ist ein Trennzeichen für mögliche Sub-Patterns. Beispiel: '#.##0;#,0000'. Default ist das Semikolon ";".
percent definiert den Prozentwert einer Zahl, nachdem sie mit 100 multipliziert wurde. Beispiel: '0.05' ergibt '5%'. Default ist "%".
zero-digit ist der Platzhalter für ggf. nicht vorhandene Stellen, die als '0' dargestellt werden sollen. Beispiel: bei '0.000,00' wird die Zahl '12.6' als '0.012,60' ausgegeben. Default ist die Null "0".

Die globale Definition eines xsl:decimal-format-Elements (es muss ein Childnode des Root-Elements xsl:stylesheet bzw. xsl:transform sein) erlaubt diverse Umformatierungen, sodass der Dezimaltrenner ein Komma wird, die Gruppierungen jedoch mit dem Punkt ...


<xsl:decimal-format 
     name="df" 
     decimal-separator="," 
     grouping-separator="." 
     minus-sign="-" 
     digit="#"/>

... sowie der Aufruf dieser benannten Formatanweisung als dritten Parameter in format-number ...


<xsl:value-of select="format-number(., '#.##0,00', 'df')"/>

... ergibt vorerst dieses Resultat:


<ergebnis>
  <wert>-10.000.001,00</wert>
  <wert>-1.001,00</wert>
  <wert>-100,00</wert>
  <wert>-11,00</wert>
  <wert>-9,00</wert>
  <wert>0,00</wert>
  <wert>9,00</wert>
  <wert>10,00</wert>
  <wert>99,00</wert>
  <wert>100,00</wert>
  <wert>999,00</wert>
  <wert>1.000,00</wert>
  <wert>10.000.001,00</wert>
</ergebnis>

Daneben ist es möglich, auch andere Werte für das Minuszeichen ("M") bzw. für den Platzhalter ("W") vorzugeben.


<xsl:decimal-format 
     name="df" 
     decimal-separator="," 
     grouping-separator="." 
     minus-sign="M" 
     digit="W"/>

Mit dem Aufruf von


<xsl:value-of select="format-number(., 'W.WW0,00', 'df')"/>

... ändert sich umgehend das Ergebnis:


<ergebnis>
  <wert>M10.000.001,00</wert>
  <wert>M1.001,00</wert>
  <wert>M100,00</wert>
  <wert>M11,00</wert>
  <wert>M9,00</wert>
  <wert>0,00</wert>
  <wert>9,00</wert>
  <wert>10,00</wert>
  <wert>99,00</wert>
  <wert>100,00</wert>
  <wert>999,00</wert>
  <wert>1.000,00</wert>
  <wert>10.000.001,00</wert>
</ergebnis>

Sie möchten das Euro-Zeichen mit ausgeben? Kein Problem:


<xsl:value-of select="format-number(., 'W.WW0,00 &#8364;', 'df')"/>

Interessant ist auch die Arbeit mit verschiedenen Patterns, die über den pattern-separator getrennt werden können.


<xsl:decimal-format 
     name="df" 
     decimal-separator="," 
     grouping-separator="." 
     minus-sign="M" 
     digit="W" 
     pattern-separator=";"/>

Damit spricht format-number verschiedene Patterns an.


<xsl:value-of 
     select="format-number(., 'W.WW0;W,0000', 'df')"/>

Die Ausgabe sieht dann so aus:


<ergebnis>
  <wert>10000001,0000</wert>
  <wert>1001,0000</wert>
  <wert>100,0000</wert>
  <wert>11,0000</wert>
  <wert>9,0000</wert>
  <wert>0</wert>
  <wert>9</wert>
  <wert>10</wert>
  <wert>99</wert>
  <wert>100</wert>
  <wert>999</wert>
  <wert>1.000</wert>
  <wert>10.000.001</wert>
</ergebnis>

wg / 5. April 2018



Fragen? Anmerkungen? Tips?

Bitte nehmen Sie Kontakt zu mir auf.






Vielen Dank für Ihr Interesse an meiner Arbeit.


V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn

☎ 0151. 750 360 61 * eMail: info10@wilfried-grupe.de

www.wilfried-grupe.de/xsl_decimal_format.html