2012-07-06 87 views
2

我需要在XSL變量中存儲小數點後兩位(貨幣數量,因此只需要多達2個位置),然後執行細胞函數。將XSL模板中的小數部分提取到變量中

<xsl:element name="BaseFare"><xsl:value-of select="ceiling(BaseAmount/Amount * (1 - ($promoDisc div 100)))"/></xsl:element> 

例如,如果金額爲499且promoDisc = 8%,則折現金額爲459.08 - 我需要將「08」(包含零)存儲在變量中供以後使用,而我返回最高金額(460)在輸出XML中。以爲我可以只做一個字符串函數,在小數點後面讀入2個字符變成一個變量,而不是做任何數學運算?

回答

3

有不同的方式來做到這一點的提取:

一,使用數字的字符串表示:

concat('.',substring(substring-after($x, '.'), 1, 2)) 

II。使用標準的數學函數

$x - floor($x) 

這個計算結果爲任意正數$x的小數部分。

的功能用途之一:format-number()round()round-half-to-even()(可最後函數只的XPath 2.0/XSLT 2.0)將其四捨五入到小數點後兩位。

在XSLT 1.0從正數來獲得在小數點後保留兩位小數完全數字(截斷不四捨五入)的一種方法,就是:

format-number(
       floor(100* $x) div 100 
      - 
       floor(floor(100* $x) div 100), 
       '.00' 
      ) 

這裏的一個完整的例子所描述的方法:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 

<xsl:template match="/"> 

    <xsl:value-of select= 
    "concat('.',substring(substring-after(0.12543, '.'), 1, 2))"/> 
========= 
    <xsl:value-of select= 
     "format-number(0.12543, '.00')"/> 
========= 
    <xsl:value-of select= 
    "format-number(
        floor(100* 999.12543) div 100 
        - 
        floor(floor(100* 999.12543) div 100), 
        '.00' 
        ) 
     "/> 
</xsl:template> 
</xsl:stylesheet> 

當這種轉化是在任何XML文檔(未使用)施加,則結果是:

.12 
========= 
    .13 
========= 
    .12 
+1

非常好!謝謝 - 像魅力一樣工作 - 並一如既往地教我一些技巧。 – Surge 2012-07-06 06:18:48

+1

@Surge:不客氣。 – 2012-07-06 12:00:04

+1

這是非常有用的,因爲Qt目前不提供'format-number()'。 – 2014-08-10 23:41:55