組み込み関数は、英数字、DBCS、数値、ブール、または日時の値を戻します。
数値組み込み関数は、以下のとおりです。
数字関数は次のカテゴリーにクラス分けされます。
表 8 に、ILE COBOL で使用可能なこれらのカテゴリーの数字関数のリストを示します。
整数 | 浮動小数点 | 引き数依存 |
---|---|---|
DATE-OF-INTEGER | ACOS | MAX * |
DATE-TO-YYYYMMDD | ANNUITY | MIN * |
DAY-OF-INTEGER | ASIN | RANGE |
DAY-TO-YYYYDDD | ATAN | SUM |
EXTRACT-DATE-TIME | COS | |
FACTORIAL | LOG | |
FIND-DURATION | LOG10 | |
INTEGER | MEAN | |
INTEGER-OF-DATE | MEDIAN | |
INTEGER-OF-DAY | MIDRANGE | |
INTEGER-PART | NUMVAL | |
LENGTH | NUMVAL-C | |
MOD | PRESENT-VALUE | |
ORD | RANDOM | |
ORD-MAX | REM | |
ORD-MIN | SIN | |
YEAR-TO-YYYY | SQRT | |
STANDARD-DEVIATION | ||
TAN | ||
VARIANCE |
数字関数はネスト可能です。ある関数を別の関数の引き数として参照できます。 ネストされた関数は、外部関数とは別に評価されます。
数字関数と演算式では構文に関する状況がよく似ているので、 演算式を数字関数の引き数としてネストすることもできます。
COMPUTE X = FUNCTION MEAN (A, B, C / D).
この例では、関数引き数は A、B、および演算式 (C / D) の 3 つだけです。
組み込み関数の便利な機能として、このほかに ALL 添え字と特殊レジスターの 2 つがあります。
ALL 添え字を使用すれば、ある配列の全エレメントを関数引き数として参照できます。 この機能はテーブルで使用します。
整数タイプの特殊レジスターは、整数引き数を使用できるところでは引き数としてどこでも使用できます。
組み込み関数を使用することにより、以下の表に示されている各種の演算を実行できます。
数値処理 | 日付 / 時刻 | 金融 | 数学 | 統計 |
---|---|---|---|---|
LENGTH MAX MIN NUMVAL NUMVAL-C ORD-MAX ORD-MIN |
CURRENT-DATE DATE-OF-INTEGER DAY-TO-YYYYDDD DATE-TO-YYYYMM DD DAY-OF-INTEGER EXTRACT-DATE- TIME FIND-DURATION INTEGER-OF-DATE INTEGER-OF-DAY WHEN-COMPILED YEAR-TO-YYYY |
ANNUITY PRESENT -VALUE |
ACOS ASIN ATAN COS FACTORIAL INTEGER INTEGER-PART LOG LOG10 MOD REM SIN SQRT SUM TAN |
MEAN MEDIAN MIDRANGE RANDOM RANGE STANDARD -DEVIATION VARIANCE |
次の例と説明で、上記の表に示されている各カテゴリーの組み込み関数を示します。
3 つの価格の平均値 (ドル記号の付いた英数字項目として表示) を調べたい場合、 その値を出力レコードの数字フィールドに入れ、出力レコードの長さを調べます。 それには、NUMVAL-C (英数字ストリングの数値の値を戻す関数) と MEAN 関数を使用できます。
01 X PIC 9(2). 01 PRICE1 PIC X(8) VALUE "$8000". 01 PRICE2 PIC X(8) VALUE "$4000". 01 PRICE3 PIC X(8) VALUE "$6000". 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 MEAN (FUNCTION NUMVAL-C(PRICE1) FUNCTION NUMVAL-C(PRICE2) FUNCTION NUMVAL-C(PRICE3)). COMPUTE X = FUNCTION LENGTH(OUTPUT-RECORD).
さらに、PRODUCT-NAME の内容を大文字にするため、次のようなステートメントを使用できます。
MOVE FUNCTION UPPER-CASE(PRODUCT-NAME) TO PRODUCT-NAME.
次の例は、90 日後の期限を計算する方法を示しています。 CURRENT-DATE 関数が戻す最初の 8 文字は、4 桁の年、2 桁の月、そして 2 桁の日付の形式 (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.
満期日をカテゴリー日時データ項目として計算することもできます。 このタイプの計算の例については 満期日の計算の例を参照してください。
事業投資の判断を行うためには、将来見込まれる現金流入の現在の値を計算して、 計画中の投資のもうけを見積もらなければならない場合がしばしばあります。 金額の現在値とは、その日の値のことです。 将来の特定の時に受け取ることが期待できる額の現在値は、 その日に投資して、一定の利率で蓄積されて達する将来の額のことです。
たとえば、$1,000 投資すると今後 3 年間に $100、$200、$300 というように毎年支払いを受けるものとします。 次の ILE 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 関数は、融資の元利を返済するための分割払い額を決めなければならないような事業上の問題に使用できます。 支払いは、毎期同額、毎期同期間、毎期同利率を特徴としています。 次の例は、$15,000 の融資を 3 年 (36 カ月) で返済するのに必要な月額の計算方法です (年利 12%、月利 = .12/12 とします)。
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).
次の ILE COBOL ステートメントは、組み込み関数のネスト方法、引き数を演算式にする方法、 および従来複雑だった数学計算を簡単に行う方法を示しています。
COMPUTE Z = FUNCTION LOG(FUNCTION SQRT (2 * X + 1)) + FUNCTION REM(X 2)
ここで、X を 2 で割った剰余は、REMAINDER 文節を使用する DIVIDE ステートメントではなく、組み込み関数を使用して求めています。
組み込み関数を使用すると、データに関する統計情報の計算も容易になります。 さまざまな市民税を計算して、 平均、中間、および範囲 (最大額と最少額の差) を出したい場合、 次のようにします。
O1 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 MEAN-TAX PIC 99V999. 01 TAX-RANGE PIC 99V999. . . . COMPUTE AVE-TAX = FUNCTION MEAN(TAX-S TAX-W TAX-B) COMPUTE MEDIAN-TAX = FUNCTION MEDIAN(TAX-S TAX-W TAX-B) COMPUTE TAX-RANGE = FUNCTION RANGE(TAX-S TAX-W TAX-B)
(C) Copyright IBM Corporation 1992, 2006. All Rights Reserved.