我们使用数字编辑图片子句 Z(4).99 来抑制前导零。它用空格替换前导零。我的问题是,我们可以删除这些空格并只显示实际值而不显示前导空格吗?
我有 ws-amount,即 pic 9(09)v99。如果我将 100 移入其中,它将看起来像 00000010000。但在我的报告中,我需要将其显示为“LOAN AMOUNT $100.00”。
最佳答案
没有使用任何功能,因为这些功能取决于站点。
所以结果是一个怪物(我不会花更多时间来完善它):
01 WS.
05 W-AMOUNT PIC 9(09)v99.
05 W-AMOUNT-ALPHA REDEFINES W-AMOUNT
PIC X(01) OCCURS 11.
05 W-DISPLAY PIC X(25).
05 W-DISPLAY-TAB REDEFINES W-DISPLAY
PIC X(01) OCCURS 25.
05 W-SENTENCE PIC X(12)
VALUE " TO PAY SOON".
05 W-SENTENCE-TAB REDEFINES W-SENTENCE
PIC X(01) OCCURS 12.
05 W-SENTENCE-LENGTH PIC 9(04) COMP-5.
05 W-POSITION-AMOUNT PIC 9(04) COMP-5.
05 W-POSITION-SENTENCE PIC 9(04) COMP-5.
05 W-POSITION-DISPLAY PIC 9(04) COMP-5.
05 W-LEADING-ZEROES PIC X(01).
88 STILL-LEADING-ZEROES VALUE "Y".
88 NO-MORE-LEADING-ZEROES VALUE "N".
后跟:
PROCEDURE DIVISION.
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
CONTROL-PROCEDURE.
**
* The main procedure of the program
**
MOVE 15314.16 TO W-AMOUNT
PERFORM SUB-PROCEDURE
DISPLAY "LOAN AMOUNT $"
W-DISPLAY
MOVE 314.16 TO W-AMOUNT
PERFORM SUB-PROCEDURE
DISPLAY "LOAN AMOUNT $" W-DISPLAY
GOBACK
.
SUB-PROCEDURE.
MOVE ZERO TO W-POSITION-DISPLAY
W-POSITION-SENTENCE
MOVE SPACES TO W-DISPLAY
SET STILL-LEADING-ZEROES TO TRUE
PERFORM VARYING W-POSITION-AMOUNT
FROM 1 BY 1
UNTIL W-POSITION-AMOUNT > 9
IF (W-AMOUNT-ALPHA (W-POSITION-AMOUNT)
NOT EQUAL ZERO) THEN
SET NO-MORE-LEADING-ZEROES TO TRUE
END-IF
IF NO-MORE-LEADING-ZEROES THEN
ADD 1 TO W-POSITION-DISPLAY
MOVE W-AMOUNT-ALPHA (W-POSITION-AMOUNT)
TO W-DISPLAY-TAB (W-POSITION-DISPLAY)
END-IF
END-PERFORM
ADD 1 TO W-POSITION-DISPLAY
MOVE "." TO W-DISPLAY-TAB (W-POSITION-DISPLAY)
ADD 1 TO W-POSITION-DISPLAY
MOVE W-AMOUNT-ALPHA (W-POSITION-AMOUNT)
TO W-DISPLAY-TAB (W-POSITION-DISPLAY)
ADD 1 TO W-POSITION-DISPLAY
W-POSITION-AMOUNT
MOVE W-AMOUNT-ALPHA (W-POSITION-AMOUNT)
TO W-DISPLAY-TAB (W-POSITION-DISPLAY)
MOVE LENGTH OF W-SENTENCE TO W-SENTENCE-LENGTH
PERFORM W-SENTENCE-LENGTH TIMES
ADD 1 TO W-POSITION-DISPLAY
W-POSITION-SENTENCE
MOVE W-SENTENCE-TAB (W-POSITION-SENTENCE)
TO W-DISPLAY-TAB (W-POSITION-DISPLAY)
END-PERFORM
.
最终结果:
LOAN AMOUNT $15314.16 TO PAY SOON
LOAN AMOUNT $314.16 TO PAY SOON
有很多优化它的方法(尤其是我处理点后面的数字的方式,这绝对是糟糕的,但我是在看其他东西的同时做的,所以我做了更简单的事情)。我不敢将它提交给代码审查。但它有效。
关于cobol - 抑制前导零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34209256/