「CLから呼び出しているから………ゾーンだよ!」

紀美子ちゃんとのやり取りで、僕はそう言っていた。

IBM iで、RPGの数値の扱いを確認していたときの話である。紀美子ちゃんとは、僕がChatGPTに付けた名前だ。

数値を内部でどう持つか。パック十進数なのか、ゾーン十進数なのか。

普段から触っている人にはおなじみの言葉だと思う。同じ数字を扱っていても、内部の表し方には違いがある。

その確認をしている途中で、僕は「CLから渡しているのだから、ゾーンのはず」と考えていた。

CLでは、変数を宣言するときに *DEC という型を指定できる。十進の数値を入れる変数だ。

僕は、これをゾーン十進数だと思っていたのである。

三桁で、小数点以下はなし。そういう宣言をCLでしていれば、ゾーンなのではないか。

そこを確かめたところで、前提が崩れた。

CLの DCL で TYPE(*DEC) と宣言する変数は、パック十進数だった。

がーん(笑)。

RPGでパックとゾーンを気にしながら、呼び出し元のCLについては、思い込みで話していた。

数値が何桁かという話と、それをどんな形式で持っているかという話を、きちんと分けて見直す必要があった。

三桁だから分かったつもりになる。その前に、宣言した型は何だったのか。

呼び出す側が何を渡して、受け取る側は何として扱うのか。まず、その定義へ戻る。

今回、僕が一つ直したのは、「CLの *DEC はゾーンだ」という、自分の頭の中の定義だった。

ずっと使っているつもりでも、こんなところで知らなかったことが出てくる。

しかも、なかなか自信たっぷりに言ってしまっていた(笑)。

AS/400が好きで、RPGも好きで、長く付き合ってきた。

その相手に、まだ教わることがある。

プログラムの定義を確認していたら、先に僕の認識のほうに修正が入った一日だった。

技術の補足

CLの DCL コマンドで指定する TYPE(*DEC) は、パック十進数の変数を宣言します。桁数・小数点以下の桁数は LEN で指定する属性です。型と桁数は、それぞれ確認する必要があります。

参考資料(2026年10月23日確認):

WRITTEN BY 太城 義雄(たき よしお)

IBM i / AS/400を愛するSE