我需要在执行ceil函数之前在XSL变量中存储小数点后的2个位置(货币金额,因此最多只需要2个位置)。
<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个字符读入变量而不是做任何数学?
答案 0 :(得分: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