如何根据我设置的图片子句从COBOL cut制作Compute Result

How to make the Compute Result from COBOL cut based on the picture clause that I set

我正在尝试显示计算结果,例如加法、减法、乘法和 div。

我的问题是我设置了计算结果但没有削减。比方说,如果我说数字 1 x 199999x99999,它将产生 10 个数字,所以我必须在数据 division 工作存储部分中使用 PIC 9(10)。但是如果 11111x22222 它将产生 9 位数字,所以结果将是 0246908402。应该有一个0,因为我设置了PIC 9(10),但它只产生了9位数字......如果我设置PIC 9(6),它将被切割成908402

我想在不设置 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.         

任何帮助将不胜感激

如果我对你的问题的理解是正确的,你想取消结果中的前导零吗?因此,在您的示例中,如果输出的最大可能值为 10 位数字,您可以将其定义为 PIC 9(10)。如果特定计算的输出结果为 0000123456,那么您希望显示 123456。理想情况下,您可能希望实际显示为 123,456 或 £123,456。这一切都可以使用 IBM Enterprise COBOL 参考手册 'zero suppression and replacement editing' 部分中描述的零抑制和编辑技术来实现。通常,您使用重新定义将输出字段更改为所需格式。 所以 WS-MUL 仍然是 PIC 9(10),但被 WS-MUL-X 使用 PIC Z(9)9 重新定义。

您可以使用 COBOL edited numerics

03 ws-output-number       pic zzzzzzzzz9.

ADD WS-NUM1   TO WS-NUM2 GIVING WS-ADD
move WS-ADD             to ws-output-number

将抑制前导零,但这会更好。

正如西蒙指出的那样,您可以使用 FUNCTION TRIM(ws-output-number) 删除 前导空格

03 ws-output-number       pic --,---,---,--9.

因为它包含符号 + 将逗号添加到输出中 提高可读性