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

在COBOL中从文件中读取浮点数,cobol,fixed-point,gnucobol,Cobol,Fixed Point,Gnucobol,我在文件中有固定点数字,每行一个,这种格式是S9(6)V9(2),但当它们被实际读取时,我在尝试将它们放入数学运算时,会得到非数字的错误。更重要的是,当我试图在程序中显示它们时,在文件中写入为567123.45的数字被保存在变量中为+567123.04。例如,文件123.45中的数字以变量形式保存为+123.45.00,并且在数学运算期间引发以下错误“WS-VALUE”不是数字:“123.45 0”。为什么呢? 我在Windows上使用4.7.4 编辑: 文件具有以下形式的记录,以新行分隔(记录

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

编辑: 文件具有以下形式的记录,以新行分隔(记录后由
read
操作记录读取):


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

只需更改定义并使用
将WS-VALUE移动到WS-VALUE-INTERNAL
(定义如您所愿)就可以使用特定的编译器(和特定的数据),但我会采用不同的方法:

我建议在处理数据之前始终验证数据(文件可能已损坏或被外部编辑)。
至少检查简单的数字数据,如
WS-CLIENT
,以确定
是否为数字
,并对数据字段
WS-VALUE
进行完整验证,或者至少使用
移动函数NUMVAL(WS-VALUE)对于WS-VALUE-INTERNAL

首先:这些不是浮点项,因为只有
用法浮点…
是浮点项。这些实际上是固定点项目。问题:你使用什么编译器?我假设GnuCOBOL 1.1提供了标准版本-如果您更改了编译器路径,您可以在菜单?->关于OpenCobolIDE中找到此信息。如何读取文件,文件及其记录描述是什么样子的?
显示
语句是什么样子的?是的,我使用的是1.1.0版。我已经编辑了关于文件结构的帖子。我强烈建议将“浮点”部分也编辑为“定点”。你的记录不是固定长度的,是吗?即使是这样,数据在字段中也是“左对齐”的,不是吗?请在您的问题中添加一些实际的完整数据记录好吗?回答您的具体问题
为什么会这样?
,因为
+123.45.00
不是有效的数字;数字字段值不会有两个小数点。而且它不是以
S9(6)V9(2)
的形式出现。
  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).