Старшинство операций

Оценить
(1 голос)

Иногда будут возникать ситуации, когда сказать, в каком именно порядке Crystal Reports будет вычислять операции в формуле, будет невозможно. Например, если требуется добавить налог на продажу к расширенной цене, вы могли бы воспользоваться следующей формулой, которая добавляет восьмипроцентный налог на продажу к расширенной цене заказа (уже подсчитанной в формуле ©Extended Price):

{©Extended Price} + {©Extended Price} * .08

Вопрос о том, в каком порядке Crystal Reports будет вычислять эту формулу, имеет решающее значение. Будет ли сначала выполняться операция сложения, а потом — операция умножения, или же наоборот? Порядок вычисления операций очень сильно повлияет на возвращаемые результаты. Предположим, что значением Extended Price является $100 и при этом операция сложения выполняется первой:

100 + 100 = 200 200 * .08 = 16.00

теперь представим, что первой выполняется операция умножения:

200 * .08 = 8.00 100 + 8 = 108.00

Хотя ваш заказчик, конечно, будет приятно удивлен, если в его счет-фактуру будет занесена сумма, получившаяся в первый раз, все-таки правильным является значение, полученное во второй раз. Но, посмотрев на формулу, вы увидите, что операция умножения идет в формуле второй. Значит ли это, что и вычисляться она тоже будет второй?

Ответ — нет. Почему? Из-за порядка старшинства операций. И хотя эта концепция, возможно, и звучит как сугубо компьютерная, она должна быть знакома еще со средней школы. В рассматриваемой формуле операции умножения и деления выполняются первыми слева направо; после этого выполняются операции сложения и вычитания, слева направо.

Как в синтаксисе Crystal, так и в синтаксисе Basic принят следующий порядок старшинства операций:

•    Возведение в степень (А).

•    Отрицание (-).

•    Умножение, деление, слева направо (*,/).

•    Только для синтаксиса Crystal: процент (%) вычисляется одновременно с умножением и делением.

•    Целочисленное деление (\ ).

•    Модуль (Mod).

•    Сложение и вычитание, слева направо (=, -).

Исходя из этого, мы можем сделать вывод, что рассмотренная выше формула, добавляющая к расширенной стоимости налог с продаж, будет работать корректно. Однако, как же быть, если по той или иной причине необходимо, чтобы первой выполнялась операция сложения, а не умножения? Опять-таки вспомним математику из средней школы и заключим ту часть формулы, которая должна вычисляться первой, в круглые скобки. В показанной ниже формуле операция сложения будет выполняться раньше, чем операция умножения:

({©Extended Price} * {©Extended Price}) * .08

На заметку! Если вы используете одну формулу внутри другой, как в данном примере, Crystal Reports вычисляет сначала вложенную формулу (на основании принципа старшинства операций), и только потом вычисляет внешнюю формулу.

 

Строковые формулы
Решение вопроса со значениями NULL
Функция ToText
Разделение строк/извлечение строк по частям
Формулы, работающие с типом даты/времени

Добавить комментарий


Защитный код
Обновить