<xsl:value-of select="format-number(12345678911234567891,'0')"/>
结果给出了12345678911234570640而不是12345678911234567891。
适用于最多15位数的数字。
<xsl:value-of select="format-number(999999999999999,'0')"/>
结果确切地给出了999999999999999。
为什么数字会改变?显示它的解决方案是什么?
答案 0 :(得分:1)
当您使用Java时,您可以考虑转移到Saxon 9作为XSLT 2.0处理器并在XSLT / XPath 2.0中使用xs:decimal
类型支持:
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs">
<xsl:template match="data">
<xsl:value-of select="format-number(xs:decimal(.), '0')"/>
</xsl:template>
</xsl:transform>
输入为
<data>12345678911234567891</data>
输出12345678911234567891
。
答案 1 :(得分:1)
首先,这取决于您使用的是XSLT 1.0还是2.0。
XSLT 1.0只有一个数字类型(双精度浮点),这不能精确地表示你的长整数。
在XSLT 2.0中,您的值是一个整数,并且所有实现都需要支持最多18位的整数。您的整数有20位数字,因此您可能仍会看到实现之间存在一些差异。
Saxon处理&#34;无限制&#34;的整数。大小(也就是说,在抱怨整数有太多数字之前,你可能会耗尽内存)。
答案 2 :(得分:0)
这是由于浮点舍入。 IEEE754浮点双精度不能区分这两个数字。
add_theme_support( 'post-thumbnails', array( 'post' ) ); // Add it for posts
add_theme_support( 'post-thumbnails', array( 'page' ) ); // Add it for pages
是 完全以浮点表示的那个,因此是你得到的那个。
15个有效数字是浮点数加倍的准确度限制,这就是为什么它在这种情况下有效。