【发布时间】:2020-05-30 12:16:40
【问题描述】:
我有一个 ascii 文件,它是来自基于 cobol 的系统的数据转储。
文档说有一个字段是PIC S9(3)V9(7).。
以下是十六进制(和 ascii)字段的两个示例以及它们所代表的结果数字(取自另一个来源)。
Hex Reported value
30 32 38 36 38 35 38 34 35 46 28.687321
ascii : 028685845F
30 39 38 34 35 36 31 33 38 43 -98.480381
ascii : 098456138C
我正在使用 ruby,即使添加了隐含十进制,我似乎得到的数字也不正确。我正在尝试解析 IBM Cobol Docs,但我会很感激帮助。
给定“PIC S9(3)V9(7).”的隐含十进制 Cobol 字段,如何使用 ruby 将其转换为有符号浮点数?
【问题讨论】:
-
你得到了什么数字?从您链接到的文档看来,它们应该是 28.6858456 和 98.4561383(均为正数),它们与报告的值匹配到小数点后 2 位和 1 位(尽管第二个符号翻转)。格式建议值应该有 7 个小数位,但报告的值只有 6 个。
-
是的,我从那些文档中得到了相同的结果。但是我确定第二个值应该是负值,因为这些是坐标。我尝试了许多其他示例,虽然我得到了几位小数的正确性,但我的转换并不完全正确。
-
第二个数字是正数。 C、A、F 或 E 的符号半字节为正,所有其他符号为负。也许您的转换是正确的,而您的数据是错误的。
-
如果你得到 matt 给你的值,基于十六进制输入,那么你的转换是正确的。甚至在您进行转换之前,您的输入是否可能以某种方式损坏?
-
您可以查看 RecordEditor (record-editor.sourceforge.net),您可以导入 cobol Copybooks(使用 binary_type=Mainframe)并使用 Cobol Copybook 显示文件