COBOLで加算(足し算)する方法を解説!(GIVING指定についても)

COBOL足し算ADD

COBOLではさまざまな計算をすることができる。特に四則演算の出現頻度は非常に高いです。
この機会にしっかりと基礎を解説します。

今回は加算(足し算)について解説します。
引き算についてはこちら、掛け算についてはこちら、割り算についてはこちらで解説します。
演算子を使用することができるCOMPUTEについてはこちらで解説しています。

加算(足し算)

加算

加算にはADDを使用する。
基本的な形は以下の通り

ADD A TO B.

これは、「A + B」を計算し、その計算結果を変数Bに代入するという意味。
数値を用いるとこんな感じ

ADD 1 TO B.

これも同じように、「1 + B」をして、変数Bに代入である。つまるところ、Bに1を加算していると取ることができる。

複数の項目を足す

複数項目の足し算例

足し算は二つの数値を足しあわすだけではなく、複数の数値を足したい場合もあると思います。その際には先ほどの変数「A」を置いたところに、さらに他の変数や数値を置くことで実現することができる。

ADD A B TO C.

これも先ほどと少しは異なるが大まかな意味は同じで、「A + B + C」をして、変数Cに結果を代入する。もちろん数値と変数を同時に足し合わせることも可能。

ADD A B 4 TO C.

こんな感じで、「A+B+4+C」の結果を変数Cに代入するということになる。

下記で説明する、GIVING指定の場合でも同様に複数の項目を足し合わせることが可能である。

ADD A B 4 GIVING C.

計算結果を異なる変数に代入(GIVING指定)

ADD A TO B.

上記の例では、「A+B」の計算結果は変数Bに代入している。そのため計算が完了すると変数Bの内容は計算前とは異なるものとなっている。
実際にプログラムを作成する際には計算結果を他の変数に代入したい時は多々ある。その場合には、「GIVING」指定をすることで任意の他の変数に計算結果を代入することができます。

ADD A B GIVING C.

上記のようにすることで、「A + B」の計算結果を変数Cに代入できる。
変数AやBの値を変更せずに計算を行うことができる。

計算結果を数値編集形式へ求める

GIVING指定では、結果を数値編集形式に代入することが可能。
数値形式では数値の表示形式を編集することが難しい場合や、「ZZ9」などゼロサプレスを行いたい場合などは、このGIVING指定をすることで、数値形式から数値編集形式へ代入を行わずに直接代入することができる。

つまり以下の変数の定義でも代入可能ある。

DATA DIVISION.
    WORKING-STORAGE SECTION.

        01 A PIC ZZZ9.
        01 B PIC 9999 VALUES 5.

PROCEDURE DIVISION.
    MAIN SECTION.

        ADD B 3 GIVING A.   *> 数値編集形式の "   8" となる 

なお、英数字形式である、「X」には代入できないため注意が必要である。

計算結果を四捨五入する(ROUNDED)

四捨五入する際には、式の最後に「ROUNDED」を指定をする。

ADD 1.5 TO B ROUNDED.

こんな感じ。
B変数がV指定(小数点以下を含める指定)ではない場合、少数第一位を四捨五入し整数にしてくれる。

では整数ではなく、変数BがV指定で、少数第一位まであった場合。

01 PIC B 99V9.

このように指定されている変数の場合には、少数第二位を四捨五入し、結果は少数第一位までにしてくれる。
もちろん、以下のような場合では

01 PIC B 99.

少数第一位を四捨五入し結果は整数になる。

詳しい四捨五入についてはこちら

計算結果を切り捨てする

計算結果の切り捨てイメージ

計算結果を切り捨てする場合には、「計算結果を四捨五入する」で説明したような「ROUNDED」指定はしないでも、自動的に切り捨てしてくれる。

例えば、以下のような変数だった場合。

01 A PIC 99 VALUE 0.

この場合には、少数点以下の数は切り捨てし、自動的に整数にしてくれる。

ADD 10.6 TO A.

計算結果は「10.6」になるが、小数点以下の「.6」を切り捨て結果は「10」になる。