2017-04-22 69 views
1

有沒有一種方法來設置數值的默認輸出格式,特別是限制xs:decimal的小數部分的長度?如何控制xs:decimal值的XSLT輸出格式?

實施例:

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

在我的系統,使用撒克遜-HE 9.7.0.5,輸出爲:

2.6535432805511811024671916 

一個額外的問題 - 我下的印象的xs:小數是有限小數部分爲18位,但上述值爲25.

xs:十進制值如何轉換爲輸出?

我想將所有值限制爲最多18位數。

+0

不是開箱即用的版本將是:編寫您自己的函數printDecimal;這個函數體的一部分可以是'format-number($ decParam,'#。##################')'[舍入已包含]。請參閱'decimal-format'來更改分隔符(另外)。 – uL1

回答

1

xs:decimal中的位數與實現有關,最小值爲18. Saxon使用任意精度(Java中的BigDecimal類)。

沒有辦法更改默認十進制到字符串的轉換,但你可以做一個明確的轉換(而不是依賴於默認轉換)使用格式號碼的功能(例如,format-number($value, '0.00')

順便說一下,XSLT 2.0一個數字,看起來像一個xs:小數(包含小數點,沒有「E」)是一個xs:小數,所以你的xsl:序列可以寫成:

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

和它仍然在做xs:小數乘法運算。