格式化具有指定小数位数的double值

时间:2012-09-04 06:51:03

标签: xml xslt

我需要根据指定的小数位数进行格式化。

例如:value = 0.012877     小数位数= 3

format-number(value,'how to declare here based on specified decimal places')

我知道一般格式:格式编号(值,' 0.00')但这里小数位是固定的,但在我的情况下它会根据我的小数位改变,所以请任何人帮助我

谢谢, @nag

3 个答案:

答案 0 :(得分:2)

以下序列构造函数......

<xsl:variable name="decimalPlaces" select="3" />
<xsl:value-of select="format-number(0.012877, substring('0.0000000000000',1,$decimalPlaces+2))"/>

... ... EMIT

0.013

......作为一个字符串。

在指令值中,写入与$ decimalPlaces的最大范围一样多的零。

答案 1 :(得分:1)

在2.0中,更直接的方法是

round-half-to-even($number, $decimalPlaces)

答案 2 :(得分:0)

这是一个简单的XSLT 1.0解决方案,不需要(可能无限制)零字符串:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>

 <xsl:param name="pNum" select="0.012877"/>
 <xsl:param name="pPrec" select="3"/>


 <xsl:template match="/">
   <xsl:value-of select="substring-before(concat($pNum, '.'), '.')"/>

   <xsl:if test="contains($pNum, '.')">
    <xsl:text>.</xsl:text>
     <xsl:value-of select="substring(substring-after($pNum,'.'), 1, $pPrec)"/>
   </xsl:if>
 </xsl:template>
</xsl:stylesheet>

当对任何XML文档(未使用)应用此转换时,会生成所需的正确结果

0.012