XSLT - 地板错误值

时间:2016-04-19 09:57:42

标签: xslt floor

当我在做一个楼层(10000000 * 1.1158)时,输出为11157999而不是11158000.但是当我尝试一个楼层(11158000)时,它会给我带来好的价值。

<?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

1 个答案:

答案 0 :(得分:1)

如果您使用的是XSLT 1.0,那么所有算术都是双精度浮点数。这不能准确地表示所有小数部分,因此它使用近似值。例如,最近的xs:double值到1.1158可能类似于1.1157999999999。如果你想要精确的十进制算术,你需要在XSLT 2.0中使用xs:decimal数据类型。