You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XSLT调用两个模板单独输出正常,相加结果显示NaN求助

XSLT数值相加出现NaN的解决方案

问题原因

从输出结果33.00 1,261.98 NaN可以看出,变量$A2的内容是带千位分隔符的格式化字符串1,261.98。XSLT的number()函数无法解析包含逗号的非纯数字字符串,会返回NaN,最终导致相加结果为NaN。

解决方案

1. 修改模板返回纯数字(推荐)

如果AWeight和BWeight模板的作用是计算数值,建议让它们直接返回纯数字值,而非带格式的字符串,格式化显示的逻辑单独处理:

<!-- 示例:修改BWeight模板返回纯数字 -->
<xsl:template name="BWeight">
  <xsl:param name="nodes"/>
  <!-- 这里写计算逻辑,比如求和,直接返回纯数字 -->
  <xsl:value-of select="sum($nodes/Weight)"/>
</xsl:template>

之后在需要显示时,用format-number()做格式化:

<!-- 显示格式化后的数值 -->
<xsl:value-of select="format-number($A1, '0.00')"/>
<xsl:value-of select="format-number($A2, '#,##0.00')"/>
<!-- 直接相加纯数字,再格式化结果 -->
<xsl:value-of select="format-number($A1 + $A2, '#,##0.00')"/>

2. 相加前清理字符串中的逗号

如果无法修改原有模板,可在相加前用translate()函数移除$A2中的逗号:

<xsl:variable name="cleanA2" select="translate($A2, ',', '')"/>
<!-- 清理后再转数字相加 -->
<xsl:value-of select="number($A1) + number($cleanA2)"/>

3. 额外检查非数字字符

如果数值中还存在空格等其他非数字字符,可扩展translate()的清理范围:

<xsl:variable name="cleanA1" select="translate($A1, ' ', '')"/>
<xsl:variable name="cleanA2" select="translate($A2, ', ', '')"/>
<xsl:value-of select="number($cleanA1) + number($cleanA2)"/>

内容的提问来源于stack exchange,提问作者Akash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 07:39:53