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

How to control XSLT output formatting for xs:decimal values?

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

示例:

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

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

 2.6535432805511811024671916

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

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

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

xs:decimal中的位数取决于实现,最少为 18。Saxon 使用任意精度(Java 中的 BigDecimal class)。

无法更改默认的十进制到字符串的转换,但您可以使用格式数字函数(例如 format-number($value, '0.00').

顺便说一句,在 XSLT 2.0 中,一个看起来像 xs:decimal(包含小数点但没有 "e")的数字是 xs:decimal,因此您的 xsl:sequence 可以写成:

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

它仍然会做 xs:decimal 乘法。