如何控制 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 乘法。
有没有办法设置数值的默认输出格式,特别是限制 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 乘法。