Если вы хотите, чтобы упакованное десятичное число было читаемым человеком со знаком, вам нужно будет преобразовать его в другой формат, в формате с числовым редактированием.
Я попробовал следующее на мэйнфрейме IBMCOBOL, и получил эти результаты.
01 DETAIL-LINE.
05 WS-DATE PIC 9(08) VALUE 20181119.
05 FILLER PIC X(01).
05 WS-PREMIUM PIC S9(05)V9(02) comp-3.
05 filler pic x value '$'.
DISPLAY DETAIL-LINE.
DATE PREMIUM
20181119 *$
Это упакованный десятичный знак с неявной десятичной точкой и знаком в последнем полубайте.
01 DETAIL-LINE2.
05 WS-DATE2 PIC 9(08) VALUE 20181119.
05 FILLER PIC X(01).
05 WS-PREMIUM2 PIC S9(05)V9(02) SIGN LEADING SEPARATE.
05 filler pic x value '$'.
DISPLAY DETAIL-LINE2.
DATE PREMIUM
20181119 +0122405$
Итак, здесь мы получаем знак, иона читаема, но мы не получаем десятичную точку, и у нас есть начальный ноль.
01 DETAIL-LINE3.
05 WS-DATE3 PIC 9(08) VALUE 20181119.
05 FILLER PIC X(01).
05 WS-PREMIUM3 PIC +9(05).9(02).
05 filler pic x value '$'.
DISPLAY DETAIL-LINE4.
DATE PREMIUM
20181119 +01224.05$
Так что теперь мы получаем десятичную точку, но все еще имеем начальный ноль.
01 DETAIL-LINE4.
05 WS-DATE4 PIC 9(08) VALUE 20181119.
05 FILLER PIC X(01).
05 WS-PREMIUM4 PIC +Z(05).9(02).
05 filler pic x value '$'.
DISPLAY DETAIL-LINE4.
DATE PREMIUM
20181119 + 1224.05$
Так что теперь у нас нет начального нуля (но есть начальный пробел).
Спасибо @NicC за следующую часть.
01 DETAIL-LINE5.
05 WS-DATE5 PIC 9(08) VALUE 20181119.
05 FILLER PIC X(01).
05 WS-PREMIUM5 PIC +++++9.9(02).
05 filler pic x value '$'.
DISPLAY DETAIL-LINE5.
DATE PREMIUM
20181119 +1224.05$
Так что с дополнительнымзнаки, знак становится плавающим, поэтому вы больше не получаете пробелы (или начальные нули).