CSV导出数字需显示两位小数(如5→5.00),XSLT代码问题求助
解决CSV导出数字保留两位小数的问题
针对你遇到的数字导出后仅显示整数(如5、10),期望呈现为5.00、10.00格式的需求,从XSLT代码逻辑和CSV解析两个层面给出解决方案:
1. 修正XSLT的数字格式化逻辑
你之前使用的#####0.##格式字符串中,##是可选占位符,整数会自动省略末尾的0。要强制保留两位小数,必须用0.00作为格式字符串,同时确保输入值是数字类型(避免字符串格式的数字导致格式化失效):
修正后的代码示例
<xsl:when test="$type='D'"> <!-- 先将值转为数字类型,再用0.00强制保留两位小数 --> <xsl:value-of select="format-number(number(amountInAccountCurrency/amount), '0.00')"/> <xsl:text>,</xsl:text> </xsl:when> <xsl:otherwise> <xsl:text>,</xsl:text> </xsl:otherwise> </xsl:choose> <xsl:choose> <xsl:when test="$type='C'"> <xsl:value-of select="format-number(number(amountInAccountCurrency/amount), '0.00')"/> <xsl:text>,</xsl:text>
number()函数:确保amount的值被转为数字类型,若原始数据是字符串格式的数字,这一步能避免格式化逻辑失效。0.00格式:0是强制占位符,无论输入是整数还是小数,都会固定显示两位小数位,比如5会转为5.00,10.5会转为10.50。
2. 解决CSV打开时的自动格式化问题
如果XSLT已经输出了5.00,但用Excel打开CSV时又变回5,这是Excel自动识别格式导致的。可以给数字加上双引号,让Excel将其识别为文本以保留格式:
<xsl:when test="$type='D'"> <xsl:text>"</xsl:text> <xsl:value-of select="format-number(number(amountInAccountCurrency/amount), '0.00')"/> <xsl:text>",</xsl:text> </xsl:when>
这样导出的CSV中该字段会显示为"5.00",Excel打开后会完整保留两位小数格式。
内容的提问来源于stack exchange,提问作者Parthrajsinh Gohil
相关产品推荐
相关产品推荐

