XSLT格式编号,逗号为印度价格

时间:2016-07-28 16:04:55

标签: xslt

我想显示印度的价格,如下:

5,55,555

555,555

应该没有小数。应该有一个逗号,如下:

  • 1,000一千
  • 10,000万
  • 1,00,000一万卢比

我的代码:

<Price>555555</Price>
<xsl:decimal-format name="Format_INR" grouping-separator="," />
<xsl:value-of select="format-number(Price, '#,##,###', 'Format_INR')" />

但它显示

555,555

我做错了什么?

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

format-number()的XSLT 2.0规范允许在示例中使用不规则的分组分隔符。

XSLT 1.0规范基于DecimalFormat的Java规范,它需要在分组分隔符之间定期间隔。

(更确切地说:JDK 7规范需要定期间隔,或者无论如何,它将最后一个间隔视为要使用的间隔:( 最后一个间隔与整数之间的间隔是使用的那个。所以“#,##,###,####”==“######,####”==“##,####,# ###“。但是XSLT 1.0规范特别指的是JDK 1.1.8,现在很难找到;我的回忆是这些问题非常模糊,而JDK规范的后续版本本质上是记录了初始实现中的错误。在JDK 1.1.8含糊不清的情况下,XSLT 1.0实现可以自由地执行。)

答案 1 :(得分:0)

如前所述,在 XSLT 2.0 中,您可以使用:

<xsl:value-of select="format-number(Price, '#,##,###')" />  

这将容纳最多9,999,999的数字。在此之上,您需要添加更多分隔符,例如:

<xsl:value-of select="format-number(Price, '##,##,##,###')" />      

适用于最高999,999,999的数字等等。

XSLT 1.0 中,您可以执行以下操作:

<xsl:choose>
    <xsl:when test="Price >= 1000">
        <xsl:value-of select="format-number(floor(Price div 1000), '#,##')" />
        <xsl:text>,</xsl:text>
        <xsl:value-of select="format-number(Price mod 1000, '000')" />
    </xsl:when>
    <xsl:otherwise>
        <xsl:value-of select="format-number(Price, '#,###')" />
    </xsl:otherwise>
</xsl:choose>

这适用于{em>任何量级的Price。如果您需要重复使用它,请考虑将其设置为命名模板。

请注意,这两种方法都不需要您定义xsl:decimal-format