从COBOL中的文件中读取浮点数

时间:2016-07-28 20:38:28

标签: cobol fixed-point gnucobol

我在文件中有定点数字,每行一个,格式为S9(6)V9(2),但实际读取时,我在尝试将它们放入时会出现non numeric错误数学运算。更重要的是,当我尝试在程序中显示它们时,文件中 567123.45 的数字将作为 +567123.04 保存在变量中。例如,文件 123.45 中的数字在变量中保存为 +123.45.00 ,并且在数学运算期间会引发以下错误'WS-VALUE' not numeric: '123.45 0'。这是为什么? 我正在使用OpenCobolIDE 4.7.4 for 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). 

1 个答案:

答案 0 :(得分:5)

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

只需更改定义并使用MOVE WS-VALUE TO WS-VALUE-INTERNAL(定义为您想要的)可以使用特定的编译器(和特定数据),但我会有所不同路线:

我建议始终验证数据,然后再对其进行操作(文件可能已损坏或外部编辑)。 至少检查WS-CLIENT的{​​{1}}等简单数字数据,并对数据字段IS NUMERIC进行完整验证,或者至少使用WS-VALUE