COBOLで四捨五入を行う2つの方法

COBOL(Common Business-Oriented Language)は、1959年に初めて登場し、ビジネス、金融、企業の管理情報システムに広く用いられているプログラミング言語です。時代が変わっても、COBOLはその重要性を失っていません。この記事では、COBOLで数値を四捨五入する2つの主要な方法について解説します。

NUMERIC-ROUNDED 属性を用いる方法

NUMERIC-ROUNDED 属性を使用すると、COBOLのCOMPUTE文で自動的に四捨五入が行われます。この方法は、プログラムで四捨五入が頻繁に必要な場合や、簡潔なコードが求められる場合に特に有用です。

以下は、NUMERIC-ROUNDED 属性を用いた四捨五入の簡単な例です。

IDENTIFICATION DIVISION.
       PROGRAM-ID. RoundingExample.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 NUM-A              PIC 9(5)V9(2) VALUE 12345.67.
       01 ROUNDED-NUM        PIC 9(5)V9(2) VALUE 0.
       PROCEDURE DIVISION.
       MAIN-PARAGRAPH.
           DISPLAY "Original number: " NUM-A
           COMPUTE ROUNDED-NUM = NUM-A ROUNDED
           DISPLAY "Rounded number: " ROUNDED-NUM
           .
       STOP RUN.

このコードでは、変数NUM-Aの数値(12345.67)がCOMPUTE文で四捨五入され、その結果が変数ROUNDED-NUMに格納されます。

この方法では、四捨五入の対象となる変数にNUMERIC-ROUNDED属性が必要です。それ以外の変数では四捨五入は行われませんので、注意が必要です。

手動で四捨五入を行う方法

NUMERIC-ROUNDED 属性が使用できない場合や、より細かい制御が必要な場合は、手動で四捨五入を行うこともできます。

以下は、手動で四捨五入を行う一例です。

IDENTIFICATION DIVISION.
       PROGRAM-ID. ManualRoundingExample.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 NUM-C              PIC 9(5)V9(2) VALUE 12345.67.
       01 TEMP-NUM           PIC 9(5)V9(3) VALUE 0.
       01 MANUAL-ROUNDED-NUM PIC 9(5)V9(2) VALUE 0.
       PROCEDURE DIVISION.
       MANUAL-ROUNDING-PARAGRAPH.
           DISPLAY "Original number: " NUM-C
           COMPUTE TEMP-NUM = NUM-C * 100
           IF TEMP-NUM MOD 10 >= 5
               ADD 1 TO TEMP-NUM
           END-IF
           DIVIDE TEMP-NUM BY 10 GIVING MANUAL-ROUNDED-NUM
           DISPLAY "Manually rounded number: " MANUAL-ROUNDED-NUM
           .
       STOP RUN.

このコードでは、変数NUM-Cの数値(12345.67)を手動で四捨五入し、その結果を変数MANUAL-ROUNDED-NUMに格納しています。

この方法では計算手順が多く、エラーが発生しやすい可能性があります。したがって、コードが正確に動作するように慎重にテストする必要があります。

まとめ

COBOLで四捨五入を行う方法は主に2つあります。一つ目はNUMERIC-ROUNDED 属性を使用する自動的な方法、二つ目は手動で四捨五入を行う方法です。プロジェクトの要件や状況に応じて、最適な方法を選びましょう。