如何计算 XSLT 中数字的绝对值?

Posted

技术标签:

【中文标题】如何计算 XSLT 中数字的绝对值?【英文标题】:How can I calculate the absolute value of a number in XSLT? 【发布时间】:2010-10-22 17:02:35 【问题描述】:

我有

<xsl:value-of select="DifferenceInDays" /> 

DifferenceInDays 有一个可以是负数或正数的值,我想显示它的绝对值。我该怎么做?

【问题讨论】:

也许你可以接受一个答案? 【参考方案1】:

在 XPath 1.0 中使用以下表达式

   $vNum*($vNum >=0) - $vNum*($vNum < 0)

如果此表达式嵌入在 XSLT (XML) 属性中,则必须对 &lt; 字符进行转义:

   $vNum*($vNum >=0) - $vNum*($vNum &lt; 0)

在 XPath 2.0 (XSLT 2.0) 中使用 abs() 函数

【讨论】:

【参考方案2】:

有些答案对于 XSLT 1.0 来说过于复杂了,实际上它要简单得多。使用数字格式,您可以定义正数和负数的结构,默认负数是-0,但是您可以定义自己的。

<xsl:value-of select='format-number(DifferenceInDays,"0;0")'/>

上面的代码将通过使用提供的格式化函数来显示Difference in Days的绝对值。

【讨论】:

据我所知应该可以工作。 XSLT 1.0 规范中提供了格式编号功能。 你有没有用 any 其中之一测试过这个?如果是,它在哪一个中起作用? 在使用 php 处理的 XSLT 1.0 中测试和使用。我使用相同的技巧来格式化负数以将它们显示在括号中,而不是使用负数,因为这对金融机构来说是正确的格式。 你没有回答我的问题。 PHP 不是 XSLT 处理器。 Xalan-J、Saxon 6.5 和 libxslt 是。这在这三个中的任何一个中都不起作用。 是的,它在 Saxon 9 中工作 - 这是一个 XSLT 2.0 处理器,因此遵循不同的规范。无论如何,如果您想要一个使用通用的字符串操作的简单解决方案,请尝试translate($number, '-', '')【参考方案3】:

diffInDays * (1 - 2*(diffInDays

【讨论】:

【参考方案4】:

这可以使用 xpath abs 函数来实现。

<xsl:value-of select="abs(DifferenceInDays)"/>

【讨论】:

那是XPath 2.0,基本不存在。

以上是关于如何计算 XSLT 中数字的绝对值?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Excel 中使用 COUNTIFS 计算绝对值大于截止值的数字?

如何使用 XSLT 从电子邮件地址中对值进行子串化

如何在 XSLT 中对值进行分组和求和

使用 XSLT 1.0 对值进行分组

xslt数值的函数与xslt字符串函数

如何使用位操作在java中获取数字的绝对值