xslt递归乘法

时间:2016-03-29 11:43:16

标签: xslt hex multiplication

我是xslt的新手,到目前为止,我尝试使用十六进制的递归功率模板如下:

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text" omit-xml-declaration="yes" encoding="UTF-8"/>
<xsl:template match="/">
<xsl:for-each select="catalog/cd">
<xsl:text>&#13;</xsl:text>
 <xsl:call-template name="hexapow">
   <xsl:with-param name="i" select = "pow" />
</xsl:call-template>
</xsl:for-each>
</xsl:template>
<xsl:template name="hexapow">
  <xsl:param name="i"/>
  <xsl:param name="index" select="$i - 1"/>
  <xsl:param name="pow" select="1"/>  

  <xsl:choose>
    <xsl:when test="$i > 0">
        <xsl:call-template name="hexapow">
            <xsl:with-param name="i" select="$index"/>
            <xsl:with-param name="pow" select="format-number(format-number($pow,'#') * 16, '#')"/>
        </xsl:call-template>
    </xsl:when>
    <xsl:otherwise>            
        <xsl:value-of select="$pow"/>

    </xsl:otherwise>
</xsl:choose>
</xsl:template>

</xsl:stylesheet>

如果我将它与以下xml一起使用

<?xml version="1.0" encoding="UTF-8"?>
    <catalog>
    <cd>
        <pow>2</pow>
    </cd>   
</catalog>

对于pow = 1到pow = 13,我得到了正确答案。

<?xml version="1.0" encoding="UTF-8"?>
    <catalog>
    <cd>
        <pow>14</pow>
    </cd>   
</catalog>

(pow = 14),我得到72057594037927946而不是72057594037927936(来自计算器)。相差10 !!

为什么?

我需要将六角值e.x A00000000000000000001转换为十进制。

0 个答案:

没有答案