今回は加算(足し算)について解説します。
足し算についてはこちら、引き算についてはこちら、掛け算についてはこちらで解説しています。
演算子を使用することができる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」となる。