期間保留的處理過程中位數輸入 - >號 - >輸出對於該XSLT:XSLT處理
<xsl:variable name="source0" select="number(num2)"/>
<xsl:variable name="source1" select="number(num3)"/>
s0 plain: <xsl:value-of select="$source0"/>
s1 plain: <xsl:value-of select="$source1"/>
test11: <xsl:value-of select="format-number($source0, '#.#')"/>
test12: <xsl:value-of select="format-number($source0, '#.###############')"/>
test21: <xsl:value-of select="format-number($source1, '#.#')"/>
test22: <xsl:value-of select="format-number($source1, '#.###############')"/>
對於XML:
<num2>123456.1234</num2>
<num3>1234567.1234</num3>
我得到如下的輸出(使用撒克遜9.2,XSLT 2.0)
s0 plain: 123456.1234
s1 plain: 1.2345671234E6
test11: 123456.1
test12: 123456.123399999996764
test21: 1234567.1
test22: 1234567.123399999924004
首先......我很好奇爲什麼它突然標準和科學記數法之間時,它EXCE切換在小數點左邊編輯6位數字?這是我的問題,我想避免科學記數法。在其他各種問題之後,我發現顯然我堅持把格式編號放在任何地方。
但格式編號似乎也不工作。儘管事實上「s1 plain」的輸出證明了處理器已知有效數字的數目(我知道轉換爲double和back會失去精度,但在這種轉換之後有正確的數字,所以...?),似乎沒有辦法以標準的非科學記數法輸出該值。在那兒?
好問題(+1)。查看我的答案以獲得最高精度的解決方案。 – 2010-07-30 04:27:01
雙字符串轉換的XSLT 2.0規範說,如果值超出範圍1e-6到1e + 6,應該使用指數表示法。當然,這些分界點完全是任意的,但是你不希望1e215用慢速寫出來...... – 2011-01-14 20:38:19
認爲「處理器已知有效數字的數量」是錯誤的。如果您想更多地瞭解所使用的算法,Saxon的轉換基於這篇着名的論文:http://portal.acm.org/citation.cfm?id=93559適應XPath規範的要求。 – 2011-01-14 20:41:16