首页 > 解决方案 > 如何在 COBOL 中使用 DIVIDE 和 CONDENSED NUMERIC Varibale

问题描述

我的问题是:我在数据库表中有数据。该列是:Z-ZYTL-RTPDHR定义为NOT NULL NUMBER(5,2)

所以我有一个程序,我需要将我的数据移动到一个变量“H-ZYTL-RTPDHR”中,然后在我编译时将这个值除以 100 在 Z8 列中除以 100,我获得了 Excel 与不同列中的数据。

我的数据:

Z8
------
34,28
70
97
8,57
21,43
94,28
94,28
100
40
40

我应该得到什么:

Z8
-------
0,3428
0,7
0,97
0,0857
0,2143
0,9428
0,9428
0,100
0,40
0,40

我的问题是如何声明变量以获得好的结果?

我声明的变量:

        01  FILLER.
         05  H-ZYTL-RTPDHR.
          10 PIC S9(5)V9(2) comp-3 VALUE.
         05  FILLER REDEFINES  H-ZYTL-RTPDHR.
          10      H-ZYTL-RTPDHR        comp-3 pic s9(5)v99.

等效 Temps Plein

        05  W-Z8                   PIC -(5),99.
        05  FILLER                 PIC X(001) VALUE ';'.

   ALIM-WZ8 SECTION.

          IF Z-ZYTL-NOMBRE > ZERO
              IF TLCODTRA(Z-ZYTL-NOMBRE) NOT = SPACES
                 MOVE Z-ZYTL-RTPDHR(Z-ZYTL-NOMBRE) TO
                     H-ZYTL-RTPDHR
                DISPLAY 'H-ZYTL-RTPDHR:'  H-ZYTL-RTPDHR
                  DIVIDE H-ZYTL-RTPDHR  BY 100   GIVING W-Z8
               DISPLAY 'W-Z8 : ' W-Z8
              END-IF
           END-IF.

标签: cobol

解决方案


您已经定义了H-ZYTL-RTPDHR两次名称:这会使您和编译器感到困惑。

你的第二个定义H-ZYTL-RTPDHR适合做算术。所有你需要的是

01  FILLER.
    10      H-ZYTL-RTPDHR        comp-3 pic s9(5)v99.

您的第一个定义H-ZYTL-RTPDHR定义了组级别 item,您不能用它进行算术运算。

但是,您的问题没有显示Z-ZYTL-RTPDHR. 如果它不是数字,那么您将不会得到您期望的结果。


推荐阅读