如何控制xs:decimal值的XSLT输出格式?

时间:2017-04-22 02:26:31

标签: xml xslt xslt-2.0 saxon

有没有办法为数值设置默认输出格式,特别是限制xs:decimal的小数部分的长度?

示例:

 <xsl:sequence select="xs:decimal('7.96062992125984252') * xs:decimal('0.33333333')" />

在我的系统上,使用Saxon-HE 9.7.0.5,输出为:

 2.6535432805511811024671916

另一个问题 - 我的印象是xs:小数部分限制为18位,但上面的值为25。

如何为输出转换xs:decimal值?

我想将所有值限制为最多18位数。

1 个答案:

答案 0 :(得分:1)

xs:decimal中的位数是依赖于实现的,最小值为18.Saxon使用任意精度(Java中的BigDecimal类)。

无法更改默认的十进制到字符串转换,但您可以使用format-number函数进行显式转换(而不是依赖于默认转换)(例如,format-number($value, '0.00')

顺便说一句,在XSLT 2.0中,一个看起来像xs:decimal(包含一个小数点而不是&#34; e&#34;)的数字是xs:decimal,所以你的xsl:sequence可以写成:

<xsl:sequence select="7.96062992125984252 * 0.33333333" />

它仍然会做xs:decimal multiplication。