XPath中的round()函数用于对数字进行四舍五入,它接收一个数值类型的参数,返回最接近该参数的整数。在处理XML里的价格、数量或统计值时,经常需要把带小数的结果整理成整数,这时round()就很实用。

round()函数的基本用法
round()的语法非常简单,形式如下:
<xsl:value-of select="round(3.6)"/> <!-- 输出 4 --> <xsl:value-of select="round(2.4)"/> <!-- 输出 2 -->
如果传入的是节点值,也可以直接写表达式:
<xsl:value-of select="round(price * 1.08)"/> <!-- 假设 price 为 19.49,乘以税率后四舍五入 -->
关于0.5的特殊规则
当小数部分刚好是0.5时,XPath的round()会向正无穷方向舍入,也就是绝对值更大的整数:
- round(2.5) 返回 3
- round(-2.5) 返回 -3
这一点和某些编程语言里的银行家舍入不同,写转换逻辑时要留意。
在XSLT中使用示例
下面是一段完整的XSLT片段,演示如何对XML中的数值字段做四舍五入:
<?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>
<xsl:for-each select="items/item">
<p>
名称: <xsl:value-of select="name"/>
原价: <xsl:value-of select="price"/>
含税价: <xsl:value-of select="round(price * 1.13)"/>
</p>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
常见注意事项
如果传给round()的不是一个数字,比如空节点或字符串,XPath会尝试转换,转换失败时会返回NaN。因此在不确定数据质量时,可以配合number()函数使用:
<xsl:value-of select="round(number(weight))"/>
另外,round()只负责到整数,如果想保留指定小数位,可以先用乘法放大,round后再除以相应倍数:
<!-- 保留两位小数的四舍五入 --> <xsl:value-of select="round(price * 100) div 100"/>
掌握这些用法后,就能在XPath查询和XSLT样式表里稳妥地完成数值四舍五入处理了。