カテゴリ: COBOL 更新日: 2025/11/17

COBOLのFUNCTION文の使い方を徹底解説!CEILやFLOORなどの便利関数を初心者向けにわかりやすく解説

FUNCTION文(CEIL, FLOORなど)の活用例
FUNCTION文(CEIL, FLOORなど)の活用例

先生と生徒の会話形式で理解しよう

生徒

「先生、COBOLでも関数みたいなものは使えるんですか?」

先生

「もちろん使えます。COBOLではFUNCTION文というものを使って、計算や文字列処理などを簡単に行うことができます。」

生徒

「えっ!関数ってCOBOLにもあるんですか?他の言語と同じように使えるんですか?」

先生

「はい。ただしCOBOL独自の書き方をします。今日はその中でも特によく使うCEIL(切り上げ)やFLOOR(切り捨て)などを中心に説明しますね。」

1. COBOLのFUNCTION文とは?

1. COBOLのFUNCTION文とは?
1. COBOLのFUNCTION文とは?

COBOLのFUNCTION文は、特定の計算や処理を簡単に行うための「組み込み関数」を呼び出す仕組みです。関数とは「よく使う処理をひとまとめにした便利な部品」のようなもので、わざわざ自分で計算式を書かなくても、あらかじめ用意された関数を使うことで、正確で効率的な処理ができます。

たとえば、ある数を切り上げたいときにはFUNCTION CEILを、切り捨てたいときにはFUNCTION FLOORを使うことができます。

2. FUNCTION CEIL(切り上げ)の使い方

2. FUNCTION CEIL(切り上げ)の使い方
2. FUNCTION CEIL(切り上げ)の使い方

FUNCTION CEILは、小数点以下の数値を切り上げて整数にする関数です。たとえば「3.2」を切り上げると「4」になります。


       IDENTIFICATION DIVISION.
       PROGRAM-ID. CEIL-DEMO.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01  WS-NUM       PIC 9V9 VALUE 3.2.
       01  WS-RESULT    PIC 9(3).
       PROCEDURE DIVISION.
           COMPUTE WS-RESULT = FUNCTION CEIL(WS-NUM)
           DISPLAY "切り上げ結果: " WS-RESULT
           STOP RUN.

    切り上げ結果: 4

このように、わざわざ「もし小数点以下があったら+1する」といった処理を自分で書かなくても、関数を使うだけで簡単に実現できます。

3. FUNCTION FLOOR(切り捨て)の使い方

3. FUNCTION FLOOR(切り捨て)の使い方
3. FUNCTION FLOOR(切り捨て)の使い方

FUNCTION FLOORは、小数点以下を切り捨てる関数です。たとえば「3.9」を切り捨てると「3」になります。四捨五入ではなく、単純に小数点以下を削除するイメージです。


       IDENTIFICATION DIVISION.
       PROGRAM-ID. FLOOR-DEMO.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01  WS-NUM       PIC 9V9 VALUE 3.9.
       01  WS-RESULT    PIC 9(3).
       PROCEDURE DIVISION.
           COMPUTE WS-RESULT = FUNCTION FLOOR(WS-NUM)
           DISPLAY "切り捨て結果: " WS-RESULT
           STOP RUN.

    切り捨て結果: 3

これも実務で非常によく使われます。たとえば「税金の計算」や「端数処理」のようなケースで、金額を切り捨てる場面が多くあります。

4. FUNCTION ROUND(四捨五入)の活用

4. FUNCTION ROUND(四捨五入)の活用
4. FUNCTION ROUND(四捨五入)の活用

もう一つ便利なのがFUNCTION ROUNDです。これは数値を四捨五入してくれる関数です。例えば「3.6」は「4」に、「3.4」は「3」になります。


       IDENTIFICATION DIVISION.
       PROGRAM-ID. ROUND-DEMO.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01  WS-NUM       PIC 9V9 VALUE 3.6.
       01  WS-RESULT    PIC 9(3).
       PROCEDURE DIVISION.
           COMPUTE WS-RESULT = FUNCTION ROUND(WS-NUM)
           DISPLAY "四捨五入結果: " WS-RESULT
           STOP RUN.

    四捨五入結果: 4

CEILFLOORROUNDを組み合わせることで、どんな端数処理にも柔軟に対応できます。

5. FUNCTION INT(整数部分の抽出)も便利

5. FUNCTION INT(整数部分の抽出)も便利
5. FUNCTION INT(整数部分の抽出)も便利

もう少し応用的なものとしてFUNCTION INTもあります。これは小数点以下を単純に削除して整数部分だけを取り出すものです。切り捨てとは似ていますが、マイナスの数でも常に小数点以下を削除するため、負の値を扱うときに違いが出ます


       IDENTIFICATION DIVISION.
       PROGRAM-ID. INT-DEMO.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01  WS-NUM       PIC S9V9 VALUE -3.7.
       01  WS-RESULT    PIC S9(3).
       PROCEDURE DIVISION.
           COMPUTE WS-RESULT = FUNCTION INT(WS-NUM)
           DISPLAY "整数部分の抽出結果: " WS-RESULT
           STOP RUN.

    整数部分の抽出結果: -3

つまり、FLOORでは-3.7は「-4」になりますが、INTでは「-3」となります。こうした違いを理解して使い分けることが大切です。

6. FUNCTION文を使うとプログラムがスッキリする

6. FUNCTION文を使うとプログラムがスッキリする
6. FUNCTION文を使うとプログラムがスッキリする

もしFUNCTION CEILなどを使わない場合、自分で条件分岐を書いて「もし小数点があれば整数を1増やす」といった処理を書く必要があります。ですがFUNCTIONを使えば、たった一行で済みます。これは保守性(メンテナンスのしやすさ)にもつながり、業務システムを安全に運用する上でも重要な考え方です。

また、CEIL(切り上げ)FLOOR(切り捨て)ROUND(四捨五入)INT(整数化)は、金額計算・在庫管理・時間の丸め処理など、あらゆる業務プログラムで使われています。

7. FUNCTION文を使うときの注意点

7. FUNCTION文を使うときの注意点
7. FUNCTION文を使うときの注意点

COBOLのFUNCTIONは基本的に読み取り専用です。つまり、関数に値を渡しても、変数そのものは書き換わりません。結果は別の変数に代入するようにしましょう。

また、使える関数はCOBOLの処理系によって異なる場合があります。メインフレームCOBOLやオープンCOBOL(GnuCOBOL)などで微妙に動作が異なる場合もあるので、開発環境のマニュアルを確認することが大切です。

まとめ

まとめ
まとめ

COBOLのFUNCTION文について学んできた内容を、ここでいったん丁寧に振り返ってみましょう。今回取り上げたCEILやFLOOR、ROUND、INTといった関数は、業務システムの中で非常に多く使われる基本的な機能で、日常的な計算処理を正確かつ簡潔に記述できるようにしてくれます。とくに金額の端数処理や在庫数量の調整、レポート出力時の数値丸めなど、どの現場でも必要になる処理を自然な形で扱えるようになるため、FUNCTION文の理解はCOBOLを扱う上で避けて通れない大切なステップです。 また、FUNCTION文は複雑な計算式を自分で書く必要がなく、すでに用意されている関数を呼び出すだけで正確な結果を得られるところに大きな魅力があります。例えば小数点以下を切り上げる処理を手書きすると、条件分岐や桁数のチェックが必要になり、少しの油断で誤った結果が出てしまうことがあります。ところがFUNCTION CEILを使えば、こうした不安を抱える必要がなくなります。これは保守作業を行う人にとっても大きな安心材料となり、長く運用される業務システムでは特に重要な考え方です。 さらに、切り上げ、切り捨て、四捨五入、整数部分の抽出という四つの代表的な関数が揃っていることで、どのような端数処理にも柔軟に対応できるという点も強みです。CEILであれば必ず大きい方向へ丸め、FLOORであれば小さい方向へ丸め、ROUNDであれば一般的な四捨五入を行い、INTであれば小数点以下を単純に削除します。特にINTは負の値を扱う際にFLOORと結果が異なることがあるため、状況に合わせて使い分けることがとても大切です。この違いを誤って理解していると、マイナスの数量や損益計算を扱うプログラムで予期しない数字が出てしまうこともあるため、今回学んだ内容を活かして慎重に使い分けたいところです。 実務では、こうした端数処理は単に「数値を丸める」だけではなく、金額を集計して総額を算出する場面、時間の区切りを整えてレポートの算出範囲を決める場面、あるいは単価と数量を掛け合わせて合計金額を出す処理など、さまざまな場面に登場します。COBOLのFUNCTION文が持つ安定性と分かりやすさは、こうした作業を安全に行うための基盤となります。特に大量のデータを扱うバッチ処理では、一度の誤差が数万件・数十万件の計算に連鎖する可能性があるため、信頼できる関数を利用した明確な計算ロジックは欠かせません。 そしてFUNCTION文は計算だけでなく、文字列処理や日付操作などにも幅広く活用できます。今回の記事では数値に焦点を当てましたが、COBOLのFUNCTIONには文字列の長さを取得したり、一部だけを取り出したり、日付から年や月を取り出したりなど、多様な関数が存在します。これらを組み合わせることで、業務特有のフォーマットに沿ったデータ変換や編集を自然に行えるようになります。こうした「ひとつひとつの小さな便利さ」が積み重なり、COBOLでの開発と保守がより落ち着いて行えるようになっていきます。 最後に、FUNCTION文はあくまで「値を返すだけの読み取り専用」であるという点にも意識を向けておきましょう。関数を呼び出しても元の変数は書き換わらず、必ず結果を別の変数に代入します。この特性を正しく理解していれば、データが意図せず変わってしまうといった問題を避けることができます。また処理系によって使える関数が違う場合もあるため、環境ごとの仕様を確認しながら実装していく姿勢が大切です。 最後に、今回学んだ内容を踏まえた小さな動作例を示しておきます。数値の丸めと複数の関数の違いを確認する場面を想定した簡単なプログラムです。

サンプルプログラムの再確認


       IDENTIFICATION DIVISION.
       PROGRAM-ID. FUNC-SUMMARY.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01  WS-A       PIC 9V9 VALUE 7.3.
       01  WS-B       PIC 9V9 VALUE 7.7.
       01  WS-CEIL    PIC 9(3).
       01  WS-FLOOR   PIC 9(3).
       01  WS-ROUND   PIC 9(3).
       01  WS-INT     PIC 9(3).
       PROCEDURE DIVISION.
           COMPUTE WS-CEIL  = FUNCTION CEIL(WS-A)
           COMPUTE WS-FLOOR = FUNCTION FLOOR(WS-B)
           COMPUTE WS-ROUND = FUNCTION ROUND(WS-A)
           COMPUTE WS-INT   = FUNCTION INT(WS-B)
           DISPLAY "切り上げ結果(7.3): " WS-CEIL
           DISPLAY "切り捨て結果(7.7): " WS-FLOOR
           DISPLAY "四捨五入結果(7.3): " WS-ROUND
           DISPLAY "整数化結果(7.7): " WS-INT
           STOP RUN.

このプログラムでは同じように見える数値処理でも、それぞれの関数が異なる働きをしていることが確認できます。実際のプログラムでも、どの丸め方法が業務要件に合っているのかをよく検討した上で使い分けることが求められます。

先生と生徒の振り返り会話

生徒

「先生、FUNCTION文って最初はただの便利なおまけ機能なのかなと思っていましたが、実務ではとても重要なんですね。」

先生

「そうですね。丸め処理は業務システムの随所に出てくるので、正確に使えることはとても大切です。特に金額計算は間違えると大きな影響が出てしまいます。」

生徒

「CEILとFLOOR、ROUND、それからINTの違いもよく分かりました。特にINTがマイナスの値でFLOORと結果が違うのが意外でした。」

先生

「そういう細かいところを理解しておくことで、業務要件に応じた適切な処理を選べるようになりますよ。COBOLは長く使われるプログラムが多いので、こうした基本を丁寧に理解しておくと強みになります。」

生徒

「はい、FUNCTION文の使い方が分かって、COBOLのプログラムがもっと読みやすく感じました!」

カテゴリの一覧へ
新着記事
New1
C#
C#のLINQでAny・Allなど条件確認メソッドの使い方を完全ガイド!初心者でもわかるデータ検証
New2
C#
C#のデフォルト引数と名前付き引数の使い方を解説!初心者でも安心のやさしい入門
New3
C#
C#のオブジェクト初期化子を完全ガイド!初心者でもわかる便利な使い方
New4
COBOL
COBOLの帳票出力と編集を完全マスター!条件付き表示で分かりやすい書類を作る方法
人気記事
No.1
Java&Spring記事人気No1
C#
C#のpartialクラスとは?初心者でも理解できるクラス分割の基本
No.2
Java&Spring記事人気No2
C#
C#でJSONファイルを読み書きする方法(JsonSerializer・Newtonsoft.Json)
No.3
Java&Spring記事人気No3
C#
C#でswitch式を使う方法!C# 8.0以降の新機能を解説
No.4
Java&Spring記事人気No4
COBOL
COBOLの数値データ型「PIC 9」の使い方と注意点をやさしく解説!
No.5
Java&Spring記事人気No5
C#
C#のLINQクエリ構文の書き方と基本操作をマスターしよう
No.6
Java&Spring記事人気No6
C#
C#のLINQ(リンク)とは?基本概念とデータ操作を初心者向けに徹底解説!
No.7
Java&Spring記事人気No7
C#
C#の非同期処理とUIスレッドをマスター!WPF/WinFormsでアプリが止まる問題を解決
No.8
Java&Spring記事人気No8
C#
C#のCancellationTokenを使ったキャンセル処理を完全ガイド!非同期処理を安全に止める方法