如何在COBOL中对浓缩数字变量进行去标度

时间:2019-02-12 11:15:19

标签: cobol

我是COBOL的入门者,所以我需要帮助。 我的问题是: 我在数据库表中有数据:我的数据是: 具有以下格式的Z-ZYSR-MONTAN(IZYSR):NOT NULL NUMBER(11,2)。

所以我有一个程序,需要将我的数据移动到一个变量“ H-ZYSR-MONTAN”中,然后在编译时将其移动到一个Z殖民地Z8中。 > 我的问题是如何对变量进行贴花以获得良好的效果?

我这样做,但是我不能服从正确的结果: 我的数据在开始: 2223,55 -10,98 -1,08 82,61

我声明的

变量: 05 H-ZYSR-MONTAN PIC S9(11)V9(2)COMP-3。

* Taux Horaire的形成             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 :(得分:1)

据我所知,您只需要将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