我正在尝试将逻辑放入XSL中以获取值。
1+ mod(DateDifference ,number)
DateDifference
可以是正数也可以是负数,无论日期差异是+ve
、-ve
还是0
,公式都应该适用于所有情况。
XSL中的此公式不适用于以下值
DateDifference= -33
Number=8
我在MS Excel中用相同的公式得到的结果是7
,但XSL结果是-1
。
有人能建议我使用所有可能的DateDifference
值的数字的正确方式或语法吗?
不同的语言对模运算使用不同的定义。在大多数编程语言中,mod
函数定义为:
n mod d = n - d * trunc(n / d)
(其中trunc()
表示截断到小数点后0位(,这也是XSLT中实现的算法。
唐纳德·克努思提出:
n mod d = n - d * floor(n / d)
这是目前在Excel中实现的算法。要在XSLT中获得相同的结果,请使用:
n - d * floor(n div d)
用于在XSL 中处理负模和正模
<xsl:function name="fun:mod" as="xs:string">
<xsl:param name="int1" as="xs:integer"/>
<xsl:param name="int2" as="xs:integer"/>
<xsl:value-of select="($int1 mod $int2 + $int2) mod $int2"/>
</xsl:function>