|
next
|
 Subject: Numeric string not displaying decimal trailing zeros Author: Thais Flory Date: 02 Oct 2008 01:16 PM
|
I have created an XSLT 2 UDF to set the precision of prices and line costs. It either pads or rounds the decimal part, if necessary. The padding mechanism is the one occasionally failing, yet it is using XSLT's concat() to add the trailing zeros, which should be returning a string.
This doesn't fail in Stylus Studio, which is set to use the Saxon 9.0.0.2 processor. But it fails in random situations on the web server, which is using Saxon-B 9.1.0.1. I thought maybe something changed and I need to do some explicit type casting?
These are the UDFs I'm talking about:
<!-- precision -->
<xsl:function name="format:precision">
<xsl:param name="value"/>
<xsl:param name="decimalPrecision"/>
<xsl:variable name="decimalPart" select="substring-after(string($value), '.')"/>
<xsl:variable name="decimalPartLength" select="string-length($decimalPart)"/>
<xsl:choose>
<xsl:when test="$decimalPartLength = 0">
<xsl:value-of select="concat($value, '.', format:padding('0', $decimalPrecision))"/>
</xsl:when>
<xsl:when test="$decimalPartLength lt $decimalPrecision">
<xsl:value-of select="concat($value, format:padding('0', $decimalPrecision - $decimalPartLength))"/>
</xsl:when>
<xsl:when test="$decimalPartLength = $decimalPrecision">
<xsl:value-of select="$value"/>
</xsl:when>
<xsl:otherwise>
<xsl:variable name="factor" select="math:naturalExponentiation(10, $decimalPrecision)"/>
<xsl:value-of select="round($value * $factor) div $factor"/>
</xsl:otherwise>
</xsl:choose>
</xsl:function>
<!-- padding -->
<xsl:function name="format:padding">
<xsl:param name="character"/>
<xsl:param name="times"/>
<xsl:choose>
<xsl:when test="$times lt 0"/>
<xsl:when test="$times = 0">
<xsl:value-of select="''"/>
</xsl:when>
<xsl:when test="$times = 1">
<xsl:value-of select="$character"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="concat($character, format:padding($character, $times - 1))"/>
</xsl:otherwise>
</xsl:choose>
</xsl:function>
Any help would be appreciated!
Thais
|
|
|