示例: 数字内部函数

以下示例和随附的说明显示了几个类别中的每个类别中的内在函数。

如果下面的示例显示分区十进制数据项,那么可以改为使用国家十进制数据项。 (但是,已签名的国家或地区十进制项要求 SIGN SEPARATE 子句生效。)

常规数字处理

假设您要查找两个价格的最大值 (下面表示为带有美元符号的字母数字项目) ,将此值放入输出记录中的数字字段中,并确定输出记录的长度。 您可以使用 NUMVAL-C (返回字母数字 或本地文字的数字值,或返回字母数字或本地数据项的函数) 以及 MAXLENGTH 函数来执行此操作:


01  X                   Pic 9(2).
01  Price1              Pic x(8)   Value "$8000".
01  Price2              Pic x(8)   Value "$2000".
01  Output-Record.
    05  Product-Name    Pic x(20).
    05  Product-Number  Pic 9(9).
    05  Product-Price   Pic 9(6).
. . .
Procedure Division.
    Compute Product-Price =
      Function Max (Function Numval-C(Price1) Function Numval-C(Price2))
    Compute X = Function Length(Output-Record)

此外,要确保 Product-Name 中的内容为大写字母,可以使用以下语句:


Move Function Upper-case (Product-Name) to Product-Name

日期和时间

以下示例显示如何计算从今天起 90 天的到期日期。 CURRENT-DATE 函数返回的前八个字符表示采用四位数年份,两位数月份和两位数日期格式 (YYYYMMDD) 的日期。 将日期转换为其整数值; 然后将 90 添加到此值,并将整数转换回 YYYYMMDD 格式。


01  YYYYMMDD         Pic 9(8).
01  Integer-Form     Pic S9(9).
. . .
    Move Function Current-Date(1:8) to YYYYMMDD
    Compute Integer-Form = Function Integer-of-Date(YYYYMMDD)
    Add 90 to Integer-Form
    Compute YYYYMMDD = Function Date-of-Integer(Integer-Form)
    Display 'Due Date: ' YYYYMMDD

金融

企业投资决策通常需要计算预期未来现金流入的现值,以评估计划投资的盈利能力。 您期望在将来的特定时间收到的金额的现值是该金额,如果按今天的特定利率进行投资,那么该金额将累积到该未来金额。

例如,假设 1000 美元的拟议投资在未来三年分别产生 100 美元, 200 美元和 300 美元的付款流,每年一次付款。 以下 COBOL 报表按 10%的利率计算了这些现金流入的现值:


01  Series-Amt1      Pic 9(9)V99       Value 100.
01  Series-Amt2      Pic 9(9)V99       Value 200.
01  Series-Amt3      Pic 9(9)V99       Value 300.
01  Discount-Rate    Pic S9(2)V9(6)    Value .10.
01  Todays-Value     Pic 9(9)V99.
. . .
    Compute Todays-Value =
      Function
        Present-Value(Discount-Rate Series-Amt1 Series-Amt2 Series-Amt3)

您可以在需要确定偿还贷款本金和利息所必需的分期付款 (年金) 金额的业务问题中使用 ANNUITY 函数。 该系列支付的特点是每个周期金额相等,周期长度相等,每个周期利率相等。 以下示例显示如何计算在三年内以 12% 的年利率 (36 个月付款,每月利息 = .12/12) 偿还 15,000 美元贷款所需的月付款:


01  Loan             Pic 9(9)V99.
01  Payment          Pic 9(9)V99.
01  Interest         Pic 9(9)V99.
01  Number-Periods   Pic 99.
. . .
    Compute Loan = 15000
    Compute Interest = .12
    Compute Number-Periods = 36
    Compute Payment =
      Loan * Function Annuity((Interest / 12) Number-Periods)

数学

下面的 COBOL 语句演示了可以嵌套固有函数,使用算术表达式作为参数,并简单地执行以前复杂的计算:


Compute Z = Function Log(Function Sqrt (2 * X + 1)) + Function Rem(X 2)

在此附加的内部函数 REM (而不是带有 REMAINDER 子句的 DIVIDE 语句) 将返回将 X 除以 2 的余数。

统计信息

内在函数使计算统计信息变得更容易。 假定您正在分析各种城市税,并希望计算平均值,中位数和范围 (最大税与最小税之间的差值):


01  Tax-S            Pic 99v999 value .045.
01  Tax-T            Pic 99v999 value .02.
01  Tax-W            Pic 99v999 value .035.
01  Tax-B            Pic 99v999 value .03.
01  Ave-Tax          Pic 99v999.
01  Median-Tax       Pic 99v999.
01  Tax-Range        Pic 99v999.
. . .
    Compute Ave-Tax    = Function Mean   (Tax-S Tax-T Tax-W Tax-B)
    Compute Median-Tax = Function Median (Tax-S Tax-T Tax-W Tax-B)
    Compute Tax-Range  = Function Range  (Tax-S Tax-T Tax-W Tax-B)