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 muß in 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. Defaultwert: 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 Defaultwert ist "#".
grouping-separator stellt den Gruppierungs-Trenner dar, etwa in der Tausendergruppierung. Defaultwert: Komma ",". Beispiel: 1,234,567
minus-sign wird bei einer negativen Zahl verwendet. Default: das Minuszeichen "-".
name hier kann der xsl:decimal-format benannt werden, so daß er in der format-number-Funktion verwendet werden kann. Beispiel: format-number(., '#.##0,00', 'df'). Dann muß 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 Null 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 muß ein Childnode des Rootelements xsl:stylesheet bzw. xsl:transform sein) erlaubt diverse Umformatierungen, so daß 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 / 30. Dezember 2017



Fragen? Anmerkungen? Tips?

Bitte nehmen Sie Kontakt zu mir auf:

Vorname
Nachname
Mailadresse







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