在Cobol中声明外部小数

时间:2019-01-21 11:36:22

标签: cobol

正在寻找我的问题的解决方案。我需要转换的值是字母数字。

05 WS-NUM-TX.
05 WS-NUM  PIC P9(04).
05 WS-NUM1 PIC P9(03).
05 WS-NUM2 PIC P9(03).

MOVE '0001 222217' TO WS-NUM-TX.
MOVE WS-NUM-TX(1:4) TO WS-NUM.
MOVE WS-NUM-TX(6:3) TO WS-NUM1.
MOVE WS-NUM-TX(9:3) TO WS-NUM2.

我做了COMPUTE WS-NUM = FUNCTION NUMVAL(WS-NUM-TX),以使其成为数字。

现在,问题是,我需要将此值作为十进制进行计算。需要帮助将该值转换为.0001, .222 and .217,但是声明 我为显示的外部十进制做了一点小数点。请帮忙。谢谢。

2 个答案:

答案 0 :(得分:1)

serialEvent子句中的P是一个错误,PICTURE缺少PICTURE子句也是如此。 (从第4版开始。)

可能

WS-NUM-TX

根据原始帖子(修订版1和2)进行了额外的编辑。

05 WS-NUM-TX PIC X(11).
05 WS-NUM  PIC .9(04).
05 WS-NUM1 PIC .9(03).
05 WS-NUM2 PIC .9(03).

MOVE '0001 222217' TO WS-NUM-TX.
COMPUTE WS-NUM = FUNCTION NUMVAL (WS-NUM-TX(1:4)) / 10000.
COMPUTE WS-NUM1 = FUNCTION NUMVAL (WS-NUM-TX(6:3)) / 1000.
COMPUTE WS-NUM2 = FUNCTION NUMVAL (WS-NUM-TX(9:3)) / 1000.

输出:

   DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 FILLER.
       05 WS-NUM-TX.
           07 WS-NUM-TX1 PIC 9(4).
           07 FILLER     PIC X.
           07 WS-NUM-TX2 PIC 9(3).
           07 WS-NUM-TX3 PIC 9(3).
       05 WS-NUM  PIC .9(04).
       05 WS-NUM1 PIC .9(03).
       05 WS-NUM2 PIC .9(03).
   PROCEDURE DIVISION.
   BEGIN.
       MOVE '0001 222217' TO WS-NUM-TX.
       DIVIDE WS-NUM-TX1 BY 10000 GIVING WS-NUM.
       DIVIDE WS-NUM-TX2 BY 1000 GIVING WS-NUM1.
       DIVIDE WS-NUM-TX3 BY 1000 GIVING WS-NUM2.
       DISPLAY WS-NUM
       DISPLAY WS-NUM1
       DISPLAY WS-NUM2
       STOP RUN
       .

答案 1 :(得分:0)

在picture子句中使用V。这确定了逗号的位置。 例如:PIC 9(05)V9(03)将产生00000,000

来源:https://www.ibm.com/support/knowledgecenter/en/SS6SG3_4.2.0/com.ibm.entcobol.doc_4.2/PGandLR/ref/rlddesym.htm