COBOLでDIVIDE(割り算)余りの求め方も解説

COBOLで割り算

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

除算(割り算)

除算

除算は「DIVIDE」を使用する。
まずは簡単な例を、

DIVIDE A INTO B.

これは、「B ÷ A」を計算して、計算結果を変数Bに代入するという意味。
数値を用いる場合は下記の通り。

DIVIDE 10 INTO B.

これは、「B ÷ 10」を計算して、計算結果を変数Bに代入するという意味になる。
「DIVIDE」を使用した乗算では、計算結果を変数Bに代入するので、変数Bの値が上書きされてしまうので注意が必要。

計算結果を異なる変数に代入

計算結果を異なる変数に代入したいときには、「GIVING」指定をする。

DIVIDE A INTO B GIVING C.

これで、「B ÷ A」の計算結果を変数Cに代入することができる。もちろん、変数Bの値は上書きされない。
GIVING指定の際には、変数Aと変数Bの部分には数字を指定することも可能。

また、変数Cを少数点まで定義することで、少数点まで計算するようにすることが可能。

余りを求める

剰余のイメージ図
剰余を求める

割り算を行う際には余りが出ることが多々ある。そこで、余りの求め方について解説する。

余りは下記のように、「REMAINER」を指定することで求めることができる。

DIVIDE A INTO B GIVING C REMAINDER D.

上記の例では、「B」を「A」で割り、その商を「C」に代入し、剰余を「D」に求めることができる。

説明した通り、変数Cを少数点まで定義することで、商を少数点以下まで求めることができる。また、剰余の変数Dについても少数点まで定義することで、剰余についても少数点以下まで求めることができる。

DATA DIVISION.
    WORKING-STORAGE SECTION.

        01 C PIC 99V9.
        01 D PIC 9V9.

PROCEDURE DIVISION.
    MAIN SECTION.
    
        DIVIDE 3 INTO 10 GIVING C REMAINDER D. *> 10 / 3  = C 余り D
        
        DISPLAY C.   *> 03.3
        DISPLAY D.   *> 0.1

計算結果を四捨五入する

計算結果を四捨五入したい場合には、「ROUNDED」指定する。

DIVIDE A INTO B ROUNDED.

この時、変数Bが整数なのか、少数第何位まであるのかによって、どの位で四捨五入するのかが決定する。

変数Bが少数が第一位まであり数値200が変数Bに格納されている場合。

01 B PIC 999V9 VALUES 200.

少数第二位を四捨五入し、結果は少数第一位までの数になる。

DIVIDE 300 INTO B ROUNDE.

この計算結果は、「B ÷ 300」となり、変数Bは200なので「200 ÷ 300」
計算結果は「0.666…」となる。しかし、少数第二位で四捨五入するので、計算結果は「0.7」となる。

変数Bが整数であった場合
少数第一位で四捨五入し、結果は整数になる。

上記の「DIVIDE 300 INTO B ROUNDED」では、「0.6666…」の少数第一位で四捨五入され、計算結果は「1」となる。

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

計算結果を切り捨てする

計算結果を切り捨てする場合には、四捨五入の「ROUNDED」ように指定する必要はない。
変数に合わせて自動的に切り捨てをしてくれる。

例えば以下のような変数の場合

01 A PIC 99V9 VALUES 50.

この場合では、小数第二位以下の数は切り捨てし、自動的に少数第一位までにしてくれる。
では実際に計算をすると、

DIVIDE 8 INTO A.

「50 ÷ 8」の計算結果は「6.25」であるが、今回は少数第二位以下を切り捨てるので、計算結果は「6.2」となる。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA