从 COBOL 文件中读取浮点数

Reading floating-point numbers from file in COBOL

我在文件中有定点数,每行一个,采用这种格式 S9(6)V9(2) 但是当它们被实际读取时,我在尝试将它们放入时遇到 non numeric 错误数学运算。更重要的是,当我试图在程序中显示它们时,一个在文件中写为 567123.45 的数字被保存在变量中为 +567123.04。例如,文件 123.45 中的数字在变量中保存为 +123.45.00 并且它在 a 期间引发以下错误 'WS-VALUE' not numeric: '123.45 0'数学运算。这是为什么? 我正在为 Windows.

使用 OpenCobolIDE 4.7.4

编辑: 文件有如下形式的记录,由换行符分隔(通过READ操作记录读取记录):

  01 WS-OPERATION.
     05 WS-ID PIC A(2).
     05 WS-CLIENT PIC 9(5).
     05 WS-COUNTRY PIC A(4).
     05 WS-VALUE PIC S9(6)V9(2). 

原因是您尝试取消编辑字段。数据中的 567123.45 不符合 PIC S9(6)V9(2) 但符合 -9(6).9(2). - 内部存储数据与打印数据。

只需更改定义并使用 MOVE WS-VALUE TO WS-VALUE-INTERNAL(按您想要的方式定义)可能 可以与特定编译器(和特定数据)一起使用,但我会走另一条路:

我建议在使用数据之前总是验证数据(文件可能已损坏或被外部编辑)。 至少检查 WS-CLIENT 之类的简单数字数据 IS NUMERIC 并对数据字段 WS-VALUE 进行完整验证或至少使用 MOVE FUNCTION NUMVAL(WS-VALUE) TO WS-VALUE-INTERNAL.