COBOL数据类型

时间:2010-06-08 09:53:07

标签: cobol

我对COBOL数据类型感到困惑。 像在许多采访中一样,它被要求解释COMP-3和COMP之间的区别...... 有什么确切的区别? COBOL中使用模式的含义是什么?它与数据类型有什么关系?

谢谢和问候, Manasi Kulkarni

5 个答案:

答案 0 :(得分:17)

COBOL中的

USAGE描述了如何使用数据项。几个例子 用法是:

  • 显示。这标识了可以在终端上打印的项目 报告。这可能是也可能不是数字(例如可以是文本值)。该 DISPLAY项目的描述由PICture子句给出。例如: PIC 9(5) USAGE DISPLAY描述了可以显示(打印)的5位数字。 USAGE DISPLAY通常会被遗漏,因为如果遗漏则暗示。
  • INDEX。这标识了用作表(OCCURS)索引的项目。
  • COMPsomething表示要使用的数据项 算术运算(即它是某种类型的数字)。

有各种类型的数字项。两个最常用的 数字数据类型是:

  • COMPUTATIONAL或COMP。这相当于BINARY
  • COMPUTATIONAL-3或COMP-3。这相当于PACKED-DECIMAL

COMP(BINARY)数据项通常是最有效的执行方式 计算表示整数值的数据项。

COMP-3(PACKED-DECIMAL)数据项在COBOL中使用,因为 它们保持固定的小数点数。所有计算 导致具有规定小数点数的结果。 这在会计类型操作中特别有用。 浮点数表示后面的位数 小数点变量(例如小数点可以“浮动”),即 而不是通常代表金融业务的方式。

您可以找到IBM Enterprise COBOL的完整计算项目列表 here

许多程序员在使用COBOL时遇到的问题之一是 理解COMP项目非常适合做数学,但不能 显示(打印),直到它被转换为DISPLAYable项目 一个MOVE声明。如果您将COMP项目移动到报表中或转移到 屏幕不会很好。需要将其移动到DISPLAY中 项目第一。

您可能想要进一步研究的另一件事是 定义变量时PICture和USAGE之间的关系 在COBOL中。这是一个非常好的介绍COBOL Tutorial的链接 来自利默里克大学。

答案 1 :(得分:15)

COBOL实际上只有两种数据类型:数字和字符串。

COBOL记录中每个字段的布局由PICTURE(通常缩写为PIC)子句精确指定。最常见的是:

  • PIC X表示字符串。 PIC X(100)表示100字节的字符串。
  • PIC 9代表数字,可选择S(符号)或V(隐含小数点)。例如,PIC S9(7)V99表示带符号的数字,隐含小数点左边有7位数字,右边有2位数字。

数字字段可以有USAGE子句来优化其存储空间。最常见的USAGEDISPLAYCOMPCOMP-3

DISPLAY将每个数字存储为一个字符。例如,PIC 9(4) VALUE 123将数字存储为字符串“0123”。 PIC 9(4)V99 VALUE 123.45将其存储为“012345”。请注意,小数点实际上并未存储。

这是一种效率低下的格式,因为它需要8位来表示每个数字。但它通过使用最后一个字节的一半来存储符号,确实对签名数字进行了“优化”。通常,EBCDIC数字都具有F的高nybble,因此0123是F0 F1 F2 F3。但-0123是F0 F1 F2 D3 ; D表示否定。 C表示正数,F表示无符号(即正数)。 (类似的格式用于COBOL的ASCII版本,但不是标准化的。)

COMP-3是二进制编码的十进制,尾随符号为nybble。 PIC 9(3) COMP-3 VALUE 123变为两个字节12 3F。

COMPBINARY是原生二进制格式,就像C中的shortintlong一样。

答案 2 :(得分:2)

正如其他回复所示,COMP意味着大端二进制。 COMP-3是十进制的 - 这意味着一个十进制数字映射到每个半字节。

我不确定之前的回复是否存在关于精度正确的问题。

PIC S9(9)V9(9)COMP 和 PIC S9(9)V9(9)COMP-3

具有完全相同的精度。这是ANSI85标准的一部分。编译器和运行时的工作是确保COMP中的二进制表示具有适当的转换,以确保完全实现与显示使用时相同的结果或COMP- 3。

IBM大型计算机在硬件中包含十进制计算。这非常有用,因为将小数转换为二进制标度为n平方n是数字的长度。这意味着COMP-3通常是大型机最快的格式,但不太可能在分布式系统上。然而,情况并非总是如此。例如,对于非常大的小数精度(> 18位),Micro Focus原生COBOL解决方案在COMP-3中往往比COMP-5更快,但反之则相反。 Micro Focus的Managed COBOL系统在COMP中几乎总是最快的(实际上,COMP-5是最好的 - 它类似于COMP但是具有硬件端序而不是强制执行大端内存布局)。

最后,我建议对于中间值和一般数学,二元长和二元双精度的较新数据定义是更好的选择,因为编译器可以决定如何为您存储和优化。 / p>

有关分布式和托管COBOL的COBOL的更多信息,请查看这个knol:http://knol.google.com/k/alex-turner/micro-focus-managed-cobol/2246polgkyjfl/4并随时在facebook上查找cobol :)

答案 3 :(得分:2)

至于决定使用哪种数据类型,可能会变得非常复杂 - 但是 - 一套简单的指南是:

DISPLAY 和Edited Zone Decimal只能用于在报表或sysout中显示数字。将COMP和COMP-3字段移动到DISPLAY / Edited字段,然后将其放入报表或sysout中。

COMP - 具有整数的最快计算速度

COMP-3 (PACKED十进制) - 应该在维持小数位时使用。

COMP和COMP-3字段可以在计算中一起使用。编译器将确定哪个字段类型将被转换(在封面下)为单个通用数字数据类型 - 基于规则

答案 4 :(得分:0)

阐明何时为数据项选择特定类型和用途。

任何字符数据,然后是适当大小的字符串的 PIC X(n)。 较短的字符串将用尾随空格填充。

在计算中很少使用但经常显示的数字(例如 AGE、ZIPCODE、CUSTOMER_NUMBER)然后是 PIC 9(n) USAGE DISPLAY。

用于计算计算中使用的事物的整数(例如 QTY_AVAILABLE) THEN PIC S9(4) COMP. S9(4) 在大多数平台上是一个 smallint S9(8) 在大多数平台上是一个 32 位整数。

用于计算的货币值(例如 PRICE、DELIVERY_COST、TAX),然后是 PIC S9(4)V99 COMP 或 COMP-3。这将启用正确四舍五入的会计计算。

如果平台是 IBM 大型机或类似的硬件支持压缩十进制,则选择 COMP-3,否则 COMP 效率更高。

请注意,要在屏幕或报告上显示 COMP 值,您必须首先将其移至 DISPLAY 类型项目,因此应将“PIC S9(4)V99 COMP”移至“PIC ---9.99 DISPLAY”项目以制作它是人类可读的。这会将数字显示为“12.45”和“-123.45”。