我遇到过这样一种情况,即来自记录的值低于格式 01 WS-PREMIUM PIC S9(05)V9(02) comp-3。
正如我们在 comp-3 中所知道的,符号存储在最后一个半字节中。例如,值为 +1234.10 的 WS-PREMIUM 将存储为 x'0123410C' 或值为 -1234.10 的 WS-PREMIUM 将存储为 x'0123410D'。
现在我想将其写入报告文件((假设为 Daily Premium 文件)。此值应写入文件,其符号为 +1234.10$ 或 -1234.10$。我在此论坛中搜索答案,但我能做什么found 是报告部分中的预定义符号变量,而我正在寻找的是通过查看最后一个半字节并相应地写入文件来识别符号的运行时标识。我还听说他们在 java 中有一种方法,但没有确定如何。
我知道,当我们使用 DISPLAY 时,它会向您显示未压缩的十进制及其符号字节。
有人可以帮我解决这个问题。提前致谢。
这是我使用的示例代码 -
IDENTIFICATION DIVISION.
PROGRAM-ID. V1329006.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT OPDATA ASSIGN TO "OPDATA.DAT"
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD OPDATA.
01 WS-OP-RECORD PIC X(20).
WORKING-STORAGE SECTION.
01 HEADER-LINE.
05 FILLER PIC X(08) VALUE 'DATE'.
05 FILLER PIC X(01).
05 FILLER PIC X(08) VALUE 'PREMIUM'.
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.
01 WS-INPUTS.
05 WS-EARNED-PREMIUM PIC S9(05)V9(02).
05 WS-RETURN-PREMIUM PIC S9(05)V9(02).
PROCEDURE DIVISION.
OPEN OUTPUT OPDATA.
MOVE '+1234.10' TO WS-EARNED-PREMIUM
MOVE '-10.05' TO WS-RETURN-PREMIUM
COMPUTE WS-PREMIUM =
WS-EARNED-PREMIUM + WS-RETURN-PREMIUM
DISPLAY 'WS-PREMIUM='WS-PREMIUM
WRITE WS-OP-RECORD FROM HEADER-LINE
WRITE WS-OP-RECORD FROM DETAIL-LINE
CLOSE OPDATA.
GOBACK.
END PROGRAM V1329006.
我期待输出显示为
日期溢价20181119 +1224.05