データ項目に数値を割り当てるときには、MOVE ステートメントではなく COMPUTE ステートメントを使用することを考慮してください。
Move w to z Compute z = w
上記の例では、ほとんどの場合、2 つのステートメントは同じ効果があります。 ただし、MOVE ステートメントは割り当て時に切り捨てを行います。 DIAGTRUNC コンパイラー・オプションを使用して、数値受け取り側で切り捨てが起こる可能性のある MOVE ステートメントについてコンパイラーが警告を出すように要求することができます。
ただし、実行時に左側の有効数字が失われる場合、COMPUTE ステートメントを使用するとこの条件を検出し、それに対処することができます。COMPUTE ステートメントの ON SIZE ERROR 句を使用すると、コンパイラーはサイズ・オーバーフロー条件を検出するコードを生成します。条件が起こると、ON SIZE ERROR 句内のコードが実行され、z の内容は未変更のままになります。ON SIZE ERROR 句を指定しないと、割り当て時に切り捨てが行われます。 MOVE ステートメントの ON SIZE ERROR サポートはありません。
COMPUTE ステートメントを使用して、算術式 または組み込み関数 の結果をデータ項目に割り当てることもできます。以下に例を示します。
Compute z = y + (x ** 3) Compute x = Function Max(x y z)
言語環境プログラムの呼び出し可能サービスを使用すれば、日付、時刻、数値その他の計算の結果をデータ項目に割り当てることができます。 言語環境プログラムのサービスは、標準の COBOL CALL ステートメントを介して使用することができ、それらが戻す値は CALL ステートメントのパラメーターに入れて渡されます。 例えば、次のステートメントをコーディングして、データ項目の絶対値を見つけるために言語環境プログラムのサービス CEESIABS を呼び出すことができます。
Call 'CEESIABS' Using Arg, Feedback-code, Result.
この呼び出しの結果、データ項目 Result には、データ項目 Arg の値の絶対値が割り当てられます。データ項目 Feedback-code には、サービスが正常に完了したかどうかを示す戻りコードが入ります。 特定の呼び出し可能サービスの要件に従って、正しい記述を使用してすべてのデータ項目を DATA DIVISION で定義しなければなりません。 上記の例の場合は、データ項目を次のように定義することができます。
77 Arg Pic s9(9) Binary. 77 Feedback-code Pic x(12) Display. 77 Result Pic s9(9) Binary.
関連参照
DIAGTRUNC
組み込み関数 (Enterprise COBOL 言語解説書)
言語環境プログラム プログラミング・リファレンス (呼び出し可能サービス)