我正在尝试显示计算结果,如add、sub、mul和div。
我的问题是我设置了计算结果,但它没有切割。假设我说数字1 x 1
是99999x99999
,它会产生10位数字,所以我必须在数据分割工作存储部分使用PIC 9(10)
。但如果是11111x22222
,它将产生9位数字,因此结果将是0246908402
。应该有一个0,因为我设置了PIC 9(10)
,但它只产生了9个数字。。。如果我设置CCD_ 7,它将被切割成CCD_。
我想在不设置PIC
长度的情况下显示结果,所以如果它产生9个数字,它将显示所有9个数字。如果它产生7个数字,则它将显示全部7个数字而不被剪切,并且没有0来填充所有空格。有可能吗?这是代码
********************************************************
DATA DIVISION.
WORKING-STORAGE SECTION.
01 INBOUND-MESSAGE PIC X(14).
01 OUTBOUND-MESSAGE PIC X(80).
01 WS-VARIABLE.
05 DETAIL1 PIC X(14)
VALUE 'HASIL TAMBAH: '.
05 DETAIL2 PIC X(14)
VALUE 'HASIL KURANG: '.
05 DETAIL3 PIC X(14)
VALUE 'HASIL KALI : '.
05 DETAIL4 PIC X(14)
VALUE 'HASIL BAGI : '.
05 WS-NUM1 PIC 9(5).
05 WS-NUM2 PIC 9(5).
05 WS-ADD PIC 9(6).
05 WS-SUB PIC 9(6).
05 WS-MUL PIC 9(6). -> lets say i set this become 6 so if 11111x22222 it will produced 9 digits and will be cutted into 6 digits
05 WS-DIV PIC 9(6).
01 WS-STRING.
05 WS-CONCAT PIC X(80).
05 WS-CONCAT2 PIC X(80).
05 WS-CONCAT3 PIC X(80).
05 WS-CONCAT4 PIC X(80).
********************************************************
PROCEDURE DIVISION.
EXEC CICS RECEIVE
INTO (INBOUND-MESSAGE)
END-EXEC.
MOVE INBOUND-MESSAGE(5:5) TO WS-NUM1.
MOVE INBOUND-MESSAGE(10:5) TO WS-NUM2.
ADD WS-NUM1 TO WS-NUM2 GIVING WS-ADD.
SUBTRACT WS-NUM1 FROM WS-NUM2 GIVING WS-SUB.
MULTIPLY WS-NUM1 BY WS-NUM2 GIVING WS-MUL.
DIVIDE WS-NUM1 BY WS-NUM2 GIVING WS-DIV.
STRING DETAIL1
WS-ADD
DELIMITED BY ':'
INTO WS-CONCAT.
STRING DETAIL2
WS-SUB
DELIMITED BY ':'
INTO WS-CONCAT2.
STRING DETAIL3
WS-MUL
DELIMITED BY ':'
INTO WS-CONCAT3.
STRING DETAIL4
WS-DIV
DELIMITED BY ':'
INTO WS-CONCAT4.
EXEC CICS SEND
FROM (WS-STRING)
ERASE
NOHANDLE
END-EXEC.
EXEC CICS RETURN
END-EXEC.
如有任何帮助,将不胜感激
您可以使用COBOL编辑的数字,即
03 ws-output-number pic zzzzzzzzz9.
ADD WS-NUM1 TO WS-NUM2 GIVING WS-ADD
move WS-ADD to ws-output-number
将抑制领先的零点,但这会更好。
正如Simon所指出的,您可以使用FUNCTION TRIM(ws-output-number)
来移除引导空间
03 ws-output-number pic --,---,---,--9.
因为它包含符号+,所以将逗号添加到提高的可读性
如果我正确理解你的问题,你想抑制结果中的前导零吗?因此,在您的例子中,如果输出的最大可能值是一个10位数,您可以将其定义为PIC 9(10(。如果特定计算的输出结果为0000123456,则需要显示123456。理想情况下,您可能希望实际显示为123456或£123456。这一切都可以使用零抑制和编辑技术来实现,这些技术在IBM Enterprise COBOL Reference手册的"零抑制和替换编辑"一节中进行了描述。通常使用重定义将输出字段更改为所需格式。因此,WS-MUL仍然是PIC9(10(,但由WS-MUL-X使用PICZ(9(9重新定义。