Как объявлена ​​переменная числовая переменная в языке COBOL - PullRequest
0 голосов
/ 12 февраля 2019

Моя проблема с COBOL: у меня есть данные в таблице в базе данных: мои данные: Z-ZYSR-MONTAN (IZYSR), которые имеют формат: NOT NULL NUMBER (11,2).

поэтому у меня есть программа, в которой мне нужно переместить мои данные в одну переменную «H-ZYSR-MONTAN», и после того, как я переместлю это в одну колонку Z8, при компиляции я получил Excel с данными в другой колонне.

мой вопрос, как объявить переменную, чтобы получить хороший результат?

Я делаю это, но не могу получить правильный результат: Мои данные в beging: 2223,55 -10,98 -1,08 82,61

переменных, которые я объявляю: 05 H-ZYSR-MONTAN PIC S9 (11) V9 (2) COMP-3.

* Формирование буксировочного пособия 05 W-Z18 PIC S9 (11) V9 (2) COMP-3.05 FILLER PIC X (001) VALUE ';'.

Код:

    ALIM-WZ18 SECTION.
             MOVE Z-ZYSR-NOMBRE TO IZYSR.
             MOVE ZERO TO H-ZYSR-MONTAN.

          IF Z-ZYSR-NOMBRE > ZERO
             PERFORM VARYING IZYSR FROM Z-ZYSR-NOMBRE BY -1 UNTIL
                             IZYSR = ZERO
                IF Z-ZYSR-CODRUB(IZYSR) = 'THF'
                   MOVE Z-ZYSR-MONTAN(IZYSR) TO
                        H-ZYSR-MONTAN

                   MOVE ZERO TO IZYSR
                END-IF
             END-PERFORM
               MOVE H-ZYSR-MONTAN TO W-Z18
               END-IF.

Результат, который я получаю, выглядит следующим образом:

Z18 €"" 0 0 @

0 P @

Я никогда не получаю одно и то же, как: 2223,55 -10,98 -1,08 82,61

1 Ответ

0 голосов
/ 12 февраля 2019

Насколько я понимаю, вам нужно только изменить форматирование W-Z18 с PIC S9(11)V9(2) COMP-3 на PIC -(12),99, как показано ниже.Помогает ли это?

   environment division.
   configuration section.
   special-names.
       decimal-point is comma.
   data division.
   working-storage section.
   1 filler.
    2 test-values.
     3 pic s9(11)v99 comp-3 value 2223,55.
     3 pic s9(11)v99 comp-3 value -10,98.
     3 pic s9(11)v99 comp-3 value -1,08.
     3 pic s9(11)v99 comp-3 value 82,61.
    2 filler redefines test-values.
     3 test-value comp-3 pic s9(11)v99 occurs 4.

   1 W-Z18 PIC -(12),99.

   1 i binary pic 9(4).
   procedure division.
   begin.
       perform varying i from 1 by 1 until i > 4
           move test-value (i) to W-Z18
           display W-Z18
       end-perform
       stop run
       .

Результаты:

        2223,55
         -10,98
          -1,08
          82,61
...