2015-09-09 2 views
0

У меня есть следующая переменная Work-storage в моей программе.Как отменить переменную?

01 W-WRK. 
    02 W-MNTH-THRSHLD  PIC S9(04). 

Я использую ниже функцию COMPUTE, чтобы свести на нет значение W-THRSHLD-мес.

COMPUTE W-MNTH-THRSHLD OF W-WRK = 
       W-MNTH-THRSHLD OF W-WRK * -1. 

Я хочу знать, подходит ли этот подход или есть ли альтернатива для того же самого?

+2

Это или вычесть из нуля и т. Д. –

+0

Как сказал Билл, вы также можете использовать MULTIPLY -1 * W-WRK – Kennah

+0

Внутренняя функция Абсолютное значение (ABS) - это не то же самое, что отрицание, но в зависимости от того, действительно после, я предлагаю его. – Kennah

ответ

2

Во-первых, почему вы используете квалификацию (OF)? Это требуется только в том случае, если вы определили повторяющиеся имена. Зачем определять дубликаты имен в РАБОЧЕМ ХРАНЕНИИ?

Во-вторых, если вы не используете очень старый компилятор COBOL, вы должны использовать только минимальные требуемые полные остановки/периоды в PROCEDURE DIVISION. То есть один, чтобы прервать ярлык paragraph/SECTION, один, чтобы прервать абзац/раздел. Один для завершения заголовка PROCEDURE DIVISION. Один для завершения программы (если полный стоп/период еще не существует. Сохранение дополнительных полных остановок/периодов вокруг затрудняет копирование кода. Поместите полный стоп/период на отдельной строке, так что . ни одна строка кода не имеет один, то вы не можете случайно завершить сферу путем копирования строки кода с полной остановки/периода в пределах области

с теми, в виду, что ваш код становится:

 COMPUTE W-MNTH-THRSHLD  = W-MNTH-THRSHLD 
            * -1 

Умножение происходит медленнее, чем вычитание Итак, как Брюс Мартин предложил:.

 COMPUTE W-MNTH-THRSHLD  = 0 
            - W-MNTH-THRSHLD 

Я делаю это так:

 SUBTRACT W-MNTH-THRSHLD  FROM 0 
     GIVING      W-MNTH-THRSHLD-REV-SIGN 

Я не люблю «разрушающий» значение просто ради этого. Если программа выходит из строя, я знаю, что содержится в W-MNTH-THRSHLD, плюс значащее имя для целевого поля объясняет, что делает линия.

Вы также можете DIVIDE (или / в COMPUTE), но это еще медленнее, чем MULTIPLY (или *).

Также имейте в виду, что преобразования могут потребоваться, потому что вы выполняете арифметику с полем ИСПОЛЬЗОВАНИЕ DISPLAY. Если вы определяете свое поле как BINARY или PACKED-DECIMAL, то преобразование менее вероятно для арифметики. Вы не проиграете это, если только ваш компилятор не справится с ИСПОЛЬЗОВАНИЕМ DISPLAY в арифметике, не требуя преобразования.

Примечание также, COMPUTE не является функцией. COMPUTE - это глагол, только часть языка. «Я использую COMPUTE» достаточно и даже не нужно, поскольку мы можем видеть это из кода.

 Смежные вопросы

  • Нет связанных вопросов^_^