0

我正在使用基本的 .net DataColumns 和相关的 Expression 属性。

我有一个应用程序,它允许用户定义从数据库表中选择哪些列。他们还可以添加对数据列执行表达式的其他列,从而生成自定义信息网格。

我遇到的问题是当他们有一个沿着“(C2/C3)* 100”行的计算列时,其中C2和C3是数据列并且C3的值为零。旧的“除以零”问题。

简单的答案是将表达式转换为“IIF(C3 = 0, 0, (C2/C3)*100)”,但是我们不希望用户知道这样做并且在编译时我不知道知道定义了哪些列。因此,我必须以编程方式确定分区中使用了哪些列才能构造 IIF 子句。这可能会变得非常棘手。

如果发生“除以零”错误,是否有另一种方法可以不引发错误并将结果替换为 0?

4

1 回答 1

0

好的,我找到了方法。关键是对列类型使用 Double 而不是 Decimal,例如在上面的示例中,C3 应该是 Double。这将导致 Infinity 结果,可以将其作为一个整体使用表达式进行评估。

例如 IIF(CONVERT(([C4] / [C3] )*100, 'System.String') = 'NaN' 或 CONVERT(([C4] / [C3] )*100, 'System.String') = ' Infinity' OR CONVERT(([C4] / [C3] )*100, 'System.String') = '-Infinity', 0, ([C4] / [C3] )*100)

十进制似乎不提供无限选项。

于 2012-05-25T04:26:59.820 回答