導入
COBOLで数値を扱う際、計算用として使う「想定小数点(V)」と、帳票や画面表示用の「編集文字(.)」を混同していませんか? 実務において、帳票出力時に数値が「12345」と表示されるのと「123.45」と表示されるのでは、可読性に天と地ほどの差があります。今回は、データを人間が見やすい形に整形するための「挿入小数点(.)」の正しい使い方と注意点を解説します。
基礎知識
COBOLの数値項目には大きく分けて「計算用項目」と「編集項目」の二種類があります。
計算用項目(PIC 99V99など)は、メモリ上では小数点は存在せず、あくまで論理的な位置として扱われます。一方、今回解説する「編集文字(.)」を使用した項目は、その名の通り「文字列」として扱われます。
編集文字(.)を定義すると、コンパイラはメモリ上にピリオドの文字コード(X’4B’など)を実際に保持します。そのため、この項目は「数値としての計算」には適していません。あくまで「出力直前の最終的な姿」として定義するのが鉄則です。
実装/解決策
編集項目へのデータ転送は、MOVE文を使って行います。計算結果が格納された計算用項目から、編集項目へMOVEすることで、自動的に数値がピリオドの位置に合わせて整形されます。
ポイントは、計算用項目から編集項目へ値を渡す際は、桁あふれやゼロサプレス(不要なゼロの非表示)の挙動に注意することです。
サンプルプログラム
以下のコードをコピーして、手元のコンパイラで動作を確認してみてください。
IDENTIFICATION DIVISION.
PROGRAM-ID. EDIT-SAMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
- 計算用の数値データ(小数点位置は論理的に保持)
01 WS-CALC-AMT PIC 9(3)V99 VALUE 123.45.
- 編集項目(ピリオドが物理的に格納される)
01 WS-DISPLAY-AMT PIC ZZZ.99.
PROCEDURE DIVISION.
> 計算用データを編集項目へ転送
MOVE WS-CALC-AMT TO WS-DISPLAY-AMT.
> 結果の表示
DISPLAY “計算値: ” WS-CALC-AMT.
DISPLAY “編集後の表示: ” WS-DISPLAY-AMT.
STOP RUN.
応用・注意点
現場でよくある失敗として、編集後の項目に対して再び算術演算(ADDやMULTIPLYなど)を行おうとすることが挙げられます。編集項目にピリオドが入っている状態で計算を行うと、データ例外(コンパイルエラーや実行時異常)の原因となります。
また、サンプルの「Z」はゼロサプレスを意味します。例えば「005.00」という数値を「 5.00」と表示したい場合に非常に便利です。帳票設計書に合わせて、Z(ゼロサプレス)と9(数値表示)を使い分けることで、プロフェッショナルな出力結果が得られます。編集項目は「計算が終わった後の最後の砦」と覚えておいてください。

コメント