这是回答您问题的一些不同尝试。
PIC S9(15)V9(3) COMP-3 在文件中如下所示:
00 00 00 00 00 00 00 00 00 0F
如果值为 -4568248.323,则为:
00 00 00 00 04 56 82 48 32 3D
这对您没有帮助,但可能会帮助其他人。解压之前的值如下所示:
F0 F0 F0 F0 F0 F0 F0 F0 F0 F4 F5 F6 F8 F2 F4 F8 F3 F2 D3 (or F3 as the last byte, therefore losing the sign)
该字段在小数点前有 15 位(实际上是 16 位),在小数点后有 3 位。
虽然它只请求 18 位数字 (15+3),但它得到 19 以使其成为带有符号的偶数长度字段(在前面添加一个数字以使其在文件中的长度为 10 个字节)。最佳实践是始终使打包字段的长度为奇数,以避免这种混淆。
** 最后一个字母表示符号,C & F 为正,D 为负。对于您的程序,检查是否为负 (D),如果不是,则视为正。
** 'V' 是隐含的小数点。它在文件中不存在,但 COBOL 知道它用于舍入等。您需要以编程方式对其进行说明。该文件中没有任何内容可以帮助您确定它在哪里,或者它是否存在。
其他两个字段已经是奇数长度,因此当打包时,与符号一起,它们可以存储在偶数长度的空间中。
任何其他问题,编辑您的问题或在评论中提问,有人会尝试为您回答。