xsl1.0 berechnen von dezimalstellen
Jochen
- xsl
0 ThomasM0 yetanotheruser0 Jochen0 ThomasM
Hallo,
ich habe ein Frage hinsichtlich einer eleganten Umsetzung von einem Problem mit xslt1.0. Ich habe eine Zahl zB. 23,7 dieser zahl ist ein scalierungsfaktor per attribute zugeordnet. z.B.
<wert scale="3">273000</wert>
Nun soll bei der Ausgabe der Wert skaliert werden, also 27300 div 1000 = 27,3
scale=2 wuerde div 100, scale=4 würde div 10000 bedeuten, wie kann ich das am elegantesten umsetzen, zur Zeit löse ich es ueber ein rekursive template aufruf um den scalierungsfaktor in 10,100,1000 ... etc umzurechnen.
Gruß, Jochen
Hallo Jochen,
Nun soll bei der Ausgabe der Wert skaliert werden, also 27300 div 1000 = 27,3
Im Grunde geht es nur um ein Verschiebung des Dezimalpunktes. Also sollte etwas in dieser Art reichen:
<xsl:value-of select="number(concat(substring(wert,1,string-length(wert) - wert/@scale),'.',substring(wert,string-length(wert) - wert/@scale + 1)))"/>
Grüße,
Thomas
<xsl:value-of select="number(concat(substring(wert,1,string-length(wert) - wert/@scale),'.',substring(wert,string-length(wert) - wert/@scale + 1)))"/>
Warum so umständlich?
<xsl:value-of select="number(wert) div number(@scale)"/>
Sollte das gewünschte liefern.
Gruß Ben
Wer lesen kann ist klar im Vorteil. Vorherigen Post einfach mal getrost streichen :)
Gruß Ben
Thomas,
vielen Dank, das problem ist nur, das ich auch negative scale habe und zudem der wertebereich decimal ist. Also etwa auch denkbar:
<wert scale="-3">23.89</wert>
Als ergebnis muesste dann 0.02389 sein. Also die klassische Zehnerpotenz berechnung.
Gruß, Jochen
Hallo Jochen,
vielen Dank, das problem ist nur, das ich auch negative scale habe und zudem der wertebereich decimal ist. Also etwa auch denkbar:
<wert scale="-3">23.89</wert>
Als ergebnis muesste dann 0.02389 sein. Also die klassische Zehnerpotenz berechnung.
Das könnte man auch noch berücksichtigen, bräuchte dann weitere Abfragen, die in der Summe auch nicht elegnter als die bisherige rekursive Lösung sein würden. Insofern bleibe halt dabei oder steige auf XSLT 2.0 um, dann bieten sich elegantere Lösungen.
Grüße,
Thomas