Будьте внимательны, работая с оператором “#” при преобразовании результата сложных выражений. Результат может быть неожиданным, особенное если вы используете оператор “#” для преобразования типа результата выражение If-then-else (если-тогда-иначе). Давайте рассмотрим эту ситуацию более детально.
В утверждении If-then-else имеются 3 части:
Если в выражении If-then-else нет знака решетки, тогда условия “then” и “else” расцениваются как текстовые или числовые, в зависимости от правил старшинства, как указано в таблице ниже:
=3 + 4 | производит число 7, в то время как: |
=#(3 + 4) | производит текст "7", и |
=#3 + 4 | производит текст "34", где 3 и 4 просто связываются. |
Вставка символа решетки перед “if” НЕ меняет способ оценки условий “then” и “else”, однако не преобразует окончательный результат в символ.
В целом, если на выходе вы хотите получить текст (метки), вам необходимо привести условия “then” и “else” к символу, начав каждое из них с решетки. Поэтому вместо:
=#if (...) then (...) else (...) endif
Вам необходимо получить:
=if (...) then #(...) else #(...) endif
Вот несколько примеров того, как работает каждый вариант. На первом рисунке показаны параметры, используемые для просмотра четырех точек в Визексе:
Теперь давайте создадим выражение, которое будет показывать только большое значение. Наше намерение - создать метку с суффиксом “Left” (Слева) или “Right” (Справа), в зависимости от того, какое значение будет больше - слева или справа. Таким образом, для левой точки мы хотим, чтобы метка была “0,73 Справа”.
Чтобы получить данный результат, нам необходимо это выражение:
Теперь давайте рассмотрим некоторые варианты и оценим результат. В первую очередь, давайте удалим функцию ROUND (ОКРУГЛЯТЬ):
Поскольку выходными данными является текст, колонка Десятичные (Decimal) для метки отключена. После того как числа будут сконвертированы в текст, преобразование основывается на (первых) 7 значимых цифрах.
Что происходит, если мы не используем символ решетка:
Теперь условия “then” и “else” являются числовыми (поскольку первое значение является числовым). Это означает, что “ Left” и “ Right” оцениваются как 0. В связи с тем, что выходными данными являются числа, колонка Десятичные возвращается в игру (при этом текстовый суффикс, конечно же, теряется).
Теперь, если вместо “if” мы будем использовать “#if”:
Тогда условия “then” и “else” оцениваются таким же образом, как и в предыдущем примере (“ Left” и “ Right” равны 0). Однако решетка (#if), расположенная впереди, преобразовала вывод в символьный тип. Это означает, что колонка Десятичные больше не является активной, и мы возвращаемся к 7 значимым цифрам, которые получаем, преобразовывая число в текст.
© MICROMINE Pty Ltd 2016