cobol - 除法功能是什么意思

标签 cobol

DIVIDE  WS-ENT-CNYR-RED BY 4 GIVING WS-DT-CNYR 
  REMAINDER WS-YR-REMAINDER ON SIZE ERROR.

这是什么意思?

最佳答案

DIVIDE是一个COBOL动词,可让您像数学一样进行除法运算。

您的手册和课程笔记中涵盖了该动词以及其他数学动词。

您显示的实际DIVIDE在语法上是不正确的:ON SIZE ERROR短语后应有一个“命令式”。没有任何合理的COBOL编译器将允许该语句进行编译。

DIVIDE在做什么?这很可能是a年支票的开始。如果将一年除以四,则可以选择为leap年(除非也可以除以400,否则也不能除以100)。

除法的结果放置在GIVING之后的数据名称中,而除法的“剩余”则放置在REMAINDER之后的数据名称中。

通常,当使用REMAINDER时,将用整数除,这对于一年是有意义的。 2015年除以四得到503,其余为三。不是a年。

在这种情况下,ON SIZE ERROR应该是多余的。它用文字(4)除,除非结果字段的大小不足以包含结果,否则永远不会出现SIZE ERROR。

数据定义应为:

ll  WS-ENT-CNYR-RED                  PIC 9(4).
ll  WS-DT-CNYR                       PIC 9(3). 
ll  WS-YR-REMAINDER                  PIC 9.

除非当年的价值很高,否则WS-DT-CNYR必须为9(4)。 ll是一个级别编号,它将在01-49(或1-49)或77的范围内。

88级条件名称应出现在WS-YR-REMAINDER上,例如:
88  could-be-leap-year               VALUE ZERO.

在COBOL中很常见。如果未使用GIVING,则结果存储在语句中提到的字段之一中(您应检查DIVIDE,MULTIPLYADDSUBTRACT的哪个字段)。

剩余部分只有在需要除数的“模数”时,您才会看到。

除非指定了ROUNDED短语,否则不会舍入结果,而使用REMAINDER舍入没有太大意义。

在此示例中,只有WS-ENT-CNYR-RED必须是数字项。 WS-DT-CNYR和WS-YR-REMAINDER都可以是数字编辑的项目。格式化报告行时,GIVING上的项目通常会进行数字编辑。在这个开始a年检查的典型代码中,很可能全部都是数字,而全部都是整数。

根据使用这三个项目的数量以及如何使用它们,可以将它们定义为PACKED-DECIMAL(对于该编译器而言,无论哪个COMPUTATIONAL-?打包为十进制)或什至是二进制。

这不一定是a年检查的开始。除以4并需要知道余数可能还有其他原因。

请注意,DIVIDE ... INTO ...也是有效的。确实,1985年COBOL标准(及更早版本)中记录的DIVIDE语句有五种不同的格式,您应该在手册中看到这些格式。

ON SIZE ERROR告诉编译器在发生“大小错误”时生成代码。 “大小错误”是指结果不适合为其提供的字段。
  ON SIZE ERROR 
      imperative-statement.

要么
  ON SIZE ERROR 
      imperative-statement.
END-... (scope-delimiter, consists of END- prefix and verb used, in this case `END-DIVIDE`).

命令式语句可以是多个语句,但通常是一个语句(将结果字段设置为默认值,通常为零)。因为它可以是多个语句,所以终止该语句非常重要,否则您将使非期望的代码成为命令性语句的一部分。

许多人认为ON SIZE ERROR仅适用于“除以零”,但事实并非如此。如果由于字段的大小而导致结果不适合某个字段,则发生“大小错误”。

我不使用ON SIZE ERROR。我确保非零除数,并且所有结果字段都足够大以包含预期的结果。

因为我不使用ON SIZE ERROR,所以我不知道REMAINDER是否也会引起尺寸错误。我会检查 :-)

好,我检查了。这是与IBM的Enterprise COBOL一起使用的,除了扩展之外,它还适用于1985年标准。如果“剩余”字段太小而无法容纳剩余部分,则会处理“打开大小错误”。因此,请非常注意剩余字段的大小,因为无法知道哪个字段导致了大小错误。

记录如下:

SIZE ERROR短语有关格式1、2和3,请参阅“SIZE ERROR短语”
在第296页。
对于格式4和5,如果尺寸错误出现在
商,没有余数计算是有意义的。因此,
商字段(标识符3)和余数字段的内容
(标识符4)不变。如果其余部分出现尺寸错误,
其余字段(标识符4)的内容不变。在
在这两种情况下,您都必须分析结果以确定
情况实际上已经发生。

格式4和5带有REMAINDER。

如果未指定ON SIZE ERROR,则行为将取决于单个编译器和运行时选项。 Enterprise COBOL将截断这些字段,但仅在转到运行时(语言环境)检查您是否希望发生其他事情之后才进行截断。相对于指定ON SIZE ERROR,这将花费大量时间。

因此,请确保您的字段大小正确。如果您不想这样做,请使用ON SIZE ERROR。如果将ON SIZE ERROR与REMAINDER结合使用,则必须确定自己是引起SIZE ERROR的原因,然后再执行任何操作。

ON SIZE ERROR有一个对应项,NOT ON SIZE ERROR。它的用法类似于ON SIZE ERROR,但有明显的区别。 ON SIZE ERROR和NOT ON SIZE ERROR可以同时使用:
DIVIDE WS-ENT-CNYR-RED       BY 4 
  GIVING                     WS-DT-CNYR 
  REMAINDER                  WS-YR-REMAINDER 
    ON SIZE ERROR
        imperative-statement-1
    NOT ON SIZE ERROR
        imperative-statement-2
END-DIVIDE (or .)

关于cobol - 除法功能是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33037286/

相关文章:

file - 数据类型规范 '9(7)V9T' 是什么意思?

cobol - 可变长度表中的内存分配

Cobol 技术演示

linker - 什么是 "Load Module"?

cobol - 按长度连接字符串 COBOL

cobol - 如果您将文案添加到链接部分而不是将其添加到子程序中的工作存储部分,会发生什么情况?

if-statement - COBOL 程序中的语法错误,如果发生意外

cobol - 如何纠正 COBOL 程序 SYSOUT 假脱机中打印输出时的逻辑错误?

architecture - 将 Boomi 连接到 CICS 主机的推荐方法是什么?

cobol - 读取平面文件。使用 COBOL 检索特定行