对于这个 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>
我得到这个输出(使用 Saxon 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
首先...我很好奇为什么当它超过小数点左侧6位时,它会突然在标准和科学记数法之间切换?这是我的问题,我想避免使用科学记数法。在提出各种其他问题之后,我发现我显然坚持将格式编号放在任何地方。
但是格式编号似乎也不起作用。尽管“s1 plain”的输出证明处理器知道有效位数(我了解转换为双精度和返回可能会丢失精度,但是在这样的转换之后有正确的数字,所以...?),似乎没有办法以标准的非科学计数法输出该值。有没有?