我有一个非常简单的虚拟 COBOL 程序,它执行虚拟计算并显示结果。
ID DIVISION.
PROGRAM-ID. DUMMYPGM.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 NUM-A PIC 9(3) VALUE 399.
01 NUM-B PIC 9(3) VALUE 211.
01 NUM-C PIC 9(3).
*
PROCEDURE DIVISION.
MAIN.
COMPUTE NUM-C = ((NUM-A / 100) - (NUM-B / 100)) * 100
DISPLAY 'NUM-C IS ' NUM-C
STOP RUN.
当我在大型机上编译这段代码(使用编译器 MVS Enterprise COBOL V4.2)并执行它时,我得到“NUM-C IS 100”,可能是因为 (399 / 100) 在计算(同样适用于 211 / 100)。
但是当我在 PC 上编译相同的代码(使用 GnuCobol 编译器)并执行它时,我得到“NUM-C IS 188”。PC 的答案是正确的,但我想让它像大型机一样运行(因此,在计算语句中失去精度以给出 100 而不是 188)......我该怎么做?
上面的原因是这段代码的一般表达:
COMPUTE PDISCR = (((((X(1) + DX - XBRAK) * (ABRAK(1) / 1000)) / 100)
+ PHT(1) + DPH - PHBRAK) * 2) + ((V(1) + DV
+ VBRAKMPM) * (V(1) + DV - VBRAKMPM) / 100000))
这是一个有 50 年历史的火车模拟程序的一部分,我需要将其迁移到 GnuCOBOL。COMPUTE 中使用的所有字段都是整数。我需要能够从 GnuCOBOL 得到相同的答案。
已确认 OpenCOBOL/GnuCOBOL 最高 2.0。