Subject: Re: [xsl] Formatting of numbers, dynamically From: "David B. Bitton" <david@xxxxxxxxxxxxxx> Date: Tue, 12 Mar 2002 16:40:19 -0500 |
I modified the code slightly: <xsl:variable name="format-string"> <xsl:text>#,##0</xsl:text> <xsl:choose> <xsl:when test="$currency_code/@minor_unit > 0"> <xsl:text>.</xsl:text> <xsl:call-template name="minor_unit"> <xsl:with-param name="minor_unit" select="$currency_code/@minor_unit"/> </xsl:call-template> </xsl:when> </xsl:choose> </xsl:variable> I just added the xsl:choose because I was getting a decimal point when minor_unit was zero (for Yen for example). Thanks again, and if you are ever in NYC, I owe you a beer. On Mon, Mar 11, 2002 at 11:21:26PM +0100, Joerg Heinicke wrote: > Here we need again recursive template: counting down the @minor_unit, for > every processing of the template 'minor_unit' one '0'. > > the XML > > <root> > <number minor_unit="3">1.123</number> > <number minor_unit="2">1.000</number> > <number minor_unit="4">0.120</number> > <number minor_unit="3">12</number> > </root> > > the XSL: > <xsl:template match="number"> > <xsl:variable name="format-string"> > <xsl:text>#,##0.</xsl:text> > <xsl:call-template name="minor_unit"> > <xsl:with-param name="minor_unit" select="@minor_unit"/> > </xsl:call-template> > </xsl:variable> > <xsl:value-of select="$format-string"/><br/> > <xsl:value-of select="format-number(., $format-string)"/><br/> > </xsl:template> > > <xsl:template name="minor_unit"> > <xsl:param name="minor_unit" select="2"/> > <xsl:text>0</xsl:text> > <xsl:if test="$minor_unit > 1"> > <xsl:call-template name="minor_unit"> > <xsl:with-param name="minor_unit" select="$minor_unit - 1"/> > </xsl:call-template> > </xsl:if> > </xsl:template> > > the output: > #,##0.000 > 1.123 > #,##0.00 > 1.00 > #,##0.0000 > 0.1200 > #,##0.000 > 12.000 > > Regards, > > Joerg > > > I am current using format-number($node, '#,##0.00') for formatting > currency. > > We are now implementing foreign currencies into our application. For > every > > transaction, I have an element, CurrencyCode, which contains the ISO > > currencyCode and an attribute @minor_unit which tells me how many digits > > follow the decimal seperator. My question is how I can dynamically build > > the formatting string. > > > > I was reading this morning in the March 2002 issue of MSDN magazine about > > how XSLT is a "Functional programming language", and therefore > xsl:variable > > entities are "not really variables, rather runtime-assigned constants" > > because once they are assigned, the values cannot be changed. So, this > lead > > me to start thinking about how I could wrap an xsl:for-each with the > > xsl:variable element to produce my output. What I don't know if how to > > obtain functionality like: > > > > for(i=0;i<=@minor_unit;i++){ ... }; > > > > I do not want to use an enbedded JScript solution because I want the XSL > to > > be portable (namely between MSXML and Xalan). So, how would I construct > the > > @select attribute in the xsl:for-each to just loop a predetermined number > of > > times? > > > > -- > > > > David B. Bitton > > david@xxxxxxxxxxxxxx > > www.codenoevil.com > > > > Diversa ab illis virtute valemus. > > > XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list -- David B. Bitton david@xxxxxxxxxxxxxx Diversa ab illis virtute valemus.
Attachment:
pgp00001.pgp
Description: PGP signature
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Formatting of numbers, dy, David B. Bitton | Thread | Re: [xsl] Formatting of numbers, dy, David Carlisle |
Re: [xsl] adding variables, David N Bertoni/Camb | Date | RE: [xsl] adding variables, Michael Kay |
Month |