XSLT - Floor 不正确的值
XSLT - Floor incorrect value
当我做一个楼层(10000000 * 1.1158)时,输出是 11157999 而不是 11158000。但是当我尝试一个楼层(11158000)时,它 returns 我的好价值。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
format-number(floor(10000000 * 1.1158) div 10000000, '#.0000000') = <br/>
<xsl:value-of select="format-number(floor(10000000 * 1.1158) div 10000000, '#.0000000')"/>
<br/><br/>
floor(10000000 * 1.1158) div 10000000 = <br/>
<xsl:value-of select="floor(10000000 * 1.1158) div 10000000"/>
<br/><br/>
floor( 10000000 * 1.1158 ) =<br/>
<xsl:value-of select="floor( 10000000 * 1.1158 )"/>
<br/><br/>
10000000 * 1.1158 = <br/>
<xsl:value-of select="10000000 * 1.1158"/>
<br/><br/>
floor(11158000 =
<br/>
<xsl:value-of select="floor(11158000)"/>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
输出:
format-number(floor(10000000 * 1.1158) div 10000000, '#.0000000') =
1.1157999
floor(10000000 * 1.1158) div 10000000 =
1.1157999
floor( 10000000 * 1.1158 ) =
11157999
10000000 * 1.1158 =
11158000
floor(11158000 =
11158000
如果您使用的是 XSLT 1.0,则所有算术都是双精度浮点数。这不能准确地表示所有小数,所以它使用了一个近似值。例如,最接近 1.1158 的 xs:double 值可能类似于 1.1157999999999。如果您需要精确的十进制运算,则需要使用 XSLT 2.0 中的 xs:decimal 数据类型。
当我做一个楼层(10000000 * 1.1158)时,输出是 11157999 而不是 11158000。但是当我尝试一个楼层(11158000)时,它 returns 我的好价值。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
format-number(floor(10000000 * 1.1158) div 10000000, '#.0000000') = <br/>
<xsl:value-of select="format-number(floor(10000000 * 1.1158) div 10000000, '#.0000000')"/>
<br/><br/>
floor(10000000 * 1.1158) div 10000000 = <br/>
<xsl:value-of select="floor(10000000 * 1.1158) div 10000000"/>
<br/><br/>
floor( 10000000 * 1.1158 ) =<br/>
<xsl:value-of select="floor( 10000000 * 1.1158 )"/>
<br/><br/>
10000000 * 1.1158 = <br/>
<xsl:value-of select="10000000 * 1.1158"/>
<br/><br/>
floor(11158000 =
<br/>
<xsl:value-of select="floor(11158000)"/>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
输出:
format-number(floor(10000000 * 1.1158) div 10000000, '#.0000000') =
1.1157999
floor(10000000 * 1.1158) div 10000000 =
1.1157999
floor( 10000000 * 1.1158 ) =
11157999
10000000 * 1.1158 =
11158000
floor(11158000 =
11158000
如果您使用的是 XSLT 1.0,则所有算术都是双精度浮点数。这不能准确地表示所有小数,所以它使用了一个近似值。例如,最接近 1.1158 的 xs:double 值可能类似于 1.1157999999999。如果您需要精确的十进制运算,则需要使用 XSLT 2.0 中的 xs:decimal 数据类型。