示例: 数字内部函数
以下示例和随附的说明显示了几个类别中的每个类别中的内在函数。
如果下面的示例显示分区十进制数据项,那么可以改为使用国家十进制数据项。 (但是,已签名的国家或地区十进制项要求 SIGN SEPARATE 子句生效。)
常规数字处理
假设您要查找两个价格的最大值 (下面表示为带有美元符号的字母数字项目) ,将此值放入输出记录中的数字字段中,并确定输出记录的长度。 您可以使用 NUMVAL-C (返回字母数字 或本地文字的数字值,或返回字母数字或本地数据项的函数) 以及 MAX 和 LENGTH 函数来执行此操作:
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)