1. 導入:なぜINTEGER-PARTが必要なのか?
COBOLで計算処理を行っていると、「計算結果の小数点以下が邪魔だな」と感じることはありませんか?例えば、金額計算や統計処理などで、単純に端数を切り捨てて整数だけを取り出したいケースです。
もちろん、PIC句の定義で制御することも可能ですが、特定の計算の瞬間だけ「小数点以下を消したい」という場合には、組込関数の「INTEGER-PART」を使うのが最もスマートで、プログラムの意図も明確になります。
2. 基礎知識:INTEGER-PART関数とは?
INTEGER-PARTは、COBOLの標準的な「組込関数」の一つです。この関数の最大の特長は、「0の方向へ向かって小数点以下を切り捨てる」という非常に直感的な挙動にあります。
似たような関数に「INTEGER関数」がありますが、こちらは「その数値を超えない最大の整数」を返すため、負の数に対してはマイナス方向に丸められてしまいます。一方、INTEGER-PARTはプラス・マイナスに関わらず、単純に小数点以下の桁を「バサッ」と切り落とすため、迷わず使えるのが利点です。
3. 実装と論理的な解説
使い方は非常にシンプルです。COMPUTE文の中で、「FUNCTION INTEGER-PART(対象の数値)」と記述するだけです。
計算結果は、指定した受取先のデータ項目(整数型)に格納されます。この際、受取側のPIC句で小数点以下の桁を定義していても、関数側で既に切り捨てが行われているため、後続の計算で端数による誤差に悩まされることがなくなります。
4. サンプルプログラム
以下のコードをコピーして、コンパイル・実行してみてください。正と負、それぞれのケースでどのように処理されるかを確認できます。
IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE-INT-PART.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-RESULT-POS PIC S9(5).
01 WS-RESULT-NEG PIC S9(5).
PROCEDURE DIVISION.
> 正の数の切り捨て: 12.85 -> 12
COMPUTE WS-RESULT-POS = FUNCTION INTEGER-PART(12.85)
> 負の数の切り捨て: -12.85 -> -12
> 0の方向に丸められるため、単純な切り捨てになります
COMPUTE WS-RESULT-NEG = FUNCTION INTEGER-PART(-12.85)
DISPLAY “正の数の結果: ” WS-RESULT-POS
DISPLAY “負の数の結果: ” WS-RESULT-NEG
GOBACK.
5. 応用・注意点:現場での活用ポイント
現場での開発において注意すべき点は、「データ型の精度」です。
注意点1:桁あふれに注意
INTEGER-PART関数の結果を受け取るデータ項目(PIC句)が、計算結果の整数部分を保持できるサイズであることを必ず確認してください。もし整数部がPIC句の桁数を超えてしまうと、実行時にエラー(桁あふれ)が発生します。
注意点2:ビジネスロジックとの使い分け
「切り捨て」には他にも「ROUNDED」句を使った計算や、特定の桁での丸め処理などがあります。単に「小数点以下を消したい」という目的以外、例えば「100円未満を切り捨てたい」といった場合は、INTEGER-PARTではなく、数値に100を割ってからINTEGER-PARTで処理し、再び100を掛けるといった工夫が必要になります。
この関数を使いこなせば、面倒な端数処理のロジックをスッキリ書けるようになりますよ。ぜひ日々の開発で活用してみてください!

コメント