2

将在这里回答我自己的问题,但我想发布此内容以引起注意,以防其他人遇到此问题。

在 BusinessObjects 数据服务设计器中,我有两个十进制 (36, 10) 值,我想将一个除以另一个。为了解决被零除的情况,我必须首先检查分母是否为零,所以我最终得到一个 ifthenelse 语句,如下所示:

ifthenelse(Query.Denominator = 0, 0, Query.Numerator / Query.Denominator)

然而,当我执行我的工作时,我最终总是得到 0 或 1,而不是十进制值。

4

2 回答 2

2

正如我所说,我在这里已经有了答案,只是想为社区提供这个答案。

ifthenelse 语句很有趣,因为它从第二个参数中获取数据类型。在上面的代码示例中,它假定正确的数据类型是参数“0”的数据类型,它恰好是一个整数。

当 ifthenelse 从 "else" 接收到一个值时,它会将其转换为一个整数。所以值 0.356 变为 0,而 0.576 变为 1。

诀窍是将“0”转换为小数(36, 10):

ifthenelse(Query.Denominator = 0, cast(0, 'Decimal(36, 10)'), Query.Numerator / Query.Denominator)
于 2013-10-20T15:47:06.180 回答
2

谢谢你,我以为我要疯了!

顺便说一句,对于稍微简单的事情,这也有效:

ifthenelse(Query.Denominator = 0, 0.0, Query.Numerator / Query.Denominator)

于 2015-07-16T03:12:36.790 回答