Bonjour,
J'utilise comme parseur XSL : XALAN-J.
Je dois transformer des chiffres tel que : 4.1612E-8 en 0.000000041612,
pour cela j'utilise cette fonction :
Code :
- <xsl:template name="Scientific">
- <xsl:param name="Num"/>
- <xsl:if test="boolean(number(substring-after($Num,'E')))">
- <xsl:variable name="multi2" select="1"/>
- <xsl:call-template name="Scientific_Helper">
- <xsl:with-param name="m" select="substring-before($Num,'E')"/>
- <xsl:with-param name="e" select="substring-after($Num,'E')"/>
- <xsl:with-param name="multi" select="$multi2"/>
- </xsl:call-template>
- </xsl:if>
- <xsl:if test="not(boolean(number(substring-after($Num,'E'))))">
- <xsl:value-of select="round($Num)"/>
- </xsl:if>
- </xsl:template>
- <!-- Converti une notation scienfique en notation standard -->
- <xsl:template name="Scientific_Helper">
- <xsl:param name="m"/>
- <xsl:param name="e"/>
- <xsl:param name="multi"/>
- <xsl:choose>
- <xsl:when test="$e = 0 or not(boolean($e))">
- <xsl:value-of select="$m * $multi"/>
- </xsl:when>
- <xsl:when test="$e > 0">
- <xsl:call-template name="Scientific_Helper">
- <xsl:with-param name="m" select="$m"/>
- <xsl:with-param name="e" select="$e - 1"/>
- <xsl:with-param name="multi" select="$multi * 10"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:when test="$e < 0">
- <xsl:call-template name="Scientific_Helper">
- <xsl:with-param name="m" select="$m"/>
- <xsl:with-param name="e" select="$e + 1"/>
- <xsl:with-param name="multi" select="$multi div 10"/>
- </xsl:call-template>
- </xsl:when>
- </xsl:choose>
- </xsl:template>
|
Mais à cause d'un manque de precision j'obtiens cela : 0.00000004161200000000001
Tout ce qui est gras est faut !
Comment puis je faire pour augmenter la precision ?
Merci