4

ceil 関数を実行する前に、XSL 変数に小数点以下 2 桁 (通貨量なので 2 桁までしか必要ありません) を格納する必要があります。

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

たとえば。Amount の結果が 499 で promoDisc = 8% の場合、割引後の Amount は 459.08 になります。後で使用するために変数に "08" (ゼロを含む) を格納する必要がありますが、上限額 (460) を返します。出力 XML で。数学を行うのではなく、文字列関数を実行して、小数点以下の 2 文字を変数に読み込むことができると思いましたか?

4

1 に答える 1

4

この抽出を行うには、さまざまな方法があります。

I.数値の文字列表現を使用する

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

II。標準の数学関数の使用

$x - floor($x)

これは、任意の正の数の小数部分に評価され$xます。

関数の1つformat-number()、、、 (XPath 2.0 / XSLT 2.0でのみ使用可能な最後の関数)を使用してround()round-half-to-even()小数点以下2桁に丸めます。

XSLT 1.0では、正の数から小数点以下2桁の数字を正確に取得する1つの方法(丸めなしで切り捨て)は次のとおりです。

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
于 2012-07-06T03:07:13.020 に答える