我在文件中有不动点数字,每行一个,格式为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). 发布于 2016-07-28 21:16:14
原因是您试图取消编辑一个字段。数据中的567123.45不符合PIC S9(6)V9(2),而是符合-9(6).9(2).内部存储的数据与打印数据。
简单地更改定义并使用MOVE WS-VALUE TO WS-VALUE-INTERNAL (按照您希望的那样定义)可能会使用特定的编译器(和特定的数据),但我会走另一条路线:
我建议在处理数据之前始终验证数据(文件可能被破坏或外部编辑)。至少检查简单的数字数据,如WS-CLIENT for IS NUMERIC,或者对数据字段WS-VALUE进行完整的验证,或者至少使用MOVE FUNCTION NUMVAL(WS-VALUE) TO WS-VALUE-INTERNAL。
https://stackoverflow.com/questions/38646296
复制相似问题