2012-05-30 52 views
1

使用XSL添加數字時,顯示的結果爲exponent。例如,如果ProductID1111XSL顯示帶指數的結果

<xsl:value-of select="@ProductID + 1000000"/> 

它顯示像1.1111E6,但是我想要的結果是1001111

謝謝。

+1

檢查格式編號功能。您可能在這裏有一些線索:http://stackoverflow.com/questions/3758978/xslt-format-number-with-comma – BiAiB

回答

1

您大概使用了非模式感知轉換,因此@ProductID的值是無類型的,這意味着當您進行算術運算時,結果是xs:double。如果你沒有整數運算:

xs:integer(@ProductID) + 1000000 

結果將是一個xs:整數,將這樣的輸出。

在XPath 1.0中,所有的算術都是xs:double算術,但是數字到字符串的轉換規則通過要求輸出「整數」就好像它們是整數一樣來隱藏這個事實。

0

你似乎使用XSLT 2.0處理器(我用產生想要的答案都不同5-6 XSLT 1.0處理器 - 1001111

使用XSLT 2.0處理器,只是轉換@ProductIDxs:decimal

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
<xsl:output method="text"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="/*"> 
    <xsl:value-of select="xs:decimal(@ProductID) + 1000000"/> 
</xsl:template> 
</xsl:stylesheet> 

當該變換被應用在下面的XML文檔:

<t ProductID="1111"/> 

想要的,正確的結果產生:使用xs:decimal(someNumber)構造和十進制算法保證了結果的最大精度,萬一someNumber可以有

1001111 

請注意非整數值。

類型xs:decimalxs:integer基本類型,即任何xs:integer也是xs:decimal,所以這個解決方案的工作也可用於任何整數值。