Выражение DataColumn Делить на ноль

Я использую базовые.net DataColumns и связанное свойство Expression.

У меня есть приложение, которое позволяет пользователям определять, какие столбцы выбрать из таблицы базы данных. Они также могут добавлять другие столбцы, которые выполняют выражения для столбцов данных, что приводит к созданию пользовательской сетки данных.

У меня проблема, когда у них есть столбец вычисления вдоль строк "(C2/C3)*100", где C2 и C3 являются столбцами данных, а значение для C3 равно нулю. Старая проблема "делим на ноль".

Простым ответом будет преобразование выражения в "IIF(C3 = 0, 0, (C2/C3)*100)", однако мы не ожидаем, что пользователь узнает об этом, и во время компиляции я не знать, какие столбцы определены. Поэтому мне пришлось бы программно определить, какие столбцы используются в подразделении, чтобы построить предложение IIF. Это может быть довольно сложно.

Есть ли другой способ не выдавать ошибку и заменить результат на 0, если возникает ошибка "Разделить на ноль"?

1 ответ

Решение

Хорошо, я нашел способ. Ключ должен использовать Double, а не Decimal для типа столбца, например, в приведенном выше примере C3 должен быть Double. Это приведет к результату Infinity, который можно сравнить с использованием выражения в целом.

Например, IIF(CONVERT(([C4] / [C3])*100, 'System.String') = 'NaN' ИЛИ ​​CONVERT(([C4] / [C3])*100, 'System.String') = 'Infinity'ИЛИ CONVERT(([C4] / [C3])*100, 'System.String') = '-Infinity', 0, ([C4] / [C3])*100)

Кажется, что десятичная дробь не обеспечивает эту бесконечность.

Другие вопросы по тегам