Вы не указываете, какую версию XSLT вы используете, но в XSLT 1.0 вы должны сделать это «вручную», например, следующим образом:
Примечание: как говорит Майкл в комментариях, вы можете использовать номер формата в XSLT 1.0. Однако выбранное округление неясно. Пока это работает, см. Ответ Майкла для более тривиального решения.
<xsl:template match="/">
<xsl:variable name="input" select="10.23456789" />
<xsl:call-template name="truncate">
<xsl:with-param name="val" select="$input" />
</xsl:call-template>
</xsl:template>
<xsl:template name="truncate">
<xsl:param name="val" />
<xsl:variable name="adj">
<xsl:value-of select="$val"/>
<xsl:if test="not(contains($val, '.'))">.</xsl:if>
<xsl:text>0000</xsl:text>
</xsl:variable>
<xsl:variable name="before" select="substring-before($adj, '.')" />
<xsl:variable name="after" select="substring-after($adj, '.')" />
<xsl:value-of select="$before" />
<xsl:text>.</xsl:text>
<xsl:value-of select="substring($after, 1, 4)" />
</xsl:template>
А в XSLT 2.0 и 3.0 можно просто сделать так:
<xsl:value-of select="format-number($input, '#.0000')" />
Но это округлит (от половины до четного), то есть с вашим вводом это даст вам 10.2346
. Если это нежелательно, вы можете использовать трюк предложено fvu:
<xsl:value-of select="
format-number(xs:integer(number($input) * 10000) div 10000, '#.0000')" />
Обе версии XSLT 1.0 и XSLT 2.0/3.0, указанные выше, будут добавлять необходимые нули до четырех.
person
Abel
schedule
26.08.2015
#0.0000
должно быть достаточно близко к тому, что вам нужно. - person fvu   schedule 24.08.2015