负数XSLT的Mod操作



我正在尝试将逻辑放入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>

相关内容

  • 没有找到相关文章

最新更新