The XPath function number() does not return a string. It returns the number which is the result of converting the argument according to a specified set of rules. See:
The only time "
number($t1) = number($t1)" will be false is when the result of converting the value bound to $t1 is NaN, since NaN is never equal to anything, _including itself_. In fact, any comparison of NaN with any other value will always be false.
It's one of those exceedingly clever, but not always obvious idioms.
Dave
![]()
Joshua.Kuswadi@xxxxxxxxxxxxxxxxxxxx
![]()
| ![]()
| ![]()
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
cc:
Subject: RE: [xsl] Addition/Subtraction of numbers. |
Hi Jeni,
I'm curious about your solution:
> In XSLT 1.0 you need something like:
>
> <xsl:variable name="n1">
> <xsl:choose>
> <xsl:when test="number($t1) = number($t1)">
> <xsl:value-of select="$t1" />
> </xsl:when>
> <xsl:otherwise>0</xsl:otherwise>
> </xsl:choose>
> </xsl:variable>
> <xsl:variable name="n2">
> <xsl:choose>
> <xsl:when test="number($t2) = number($t2)">
> <xsl:value-of select="$t2" />
> </xsl:when>
> <xsl:otherwise>0</xsl:otherwise>
> </xsl:choose>
> </xsl:variable>
> <xsl:variable name="temp1" select="$n1 + $n2" />
I have the understanding that the XPath number() function will return the string 'NaN' if the parameter passed in is not a number. Though, at a lower level, won't the same function called twice with identical parameter(s) return the same thing? So, when would your test of "number($t1) = number($t1)" fail?
Confusedly,
Joshua

