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