RPG言語とC言語で扱えるデータタイプ違いについてみていきましょう。
RPGプログラムのフィールドは、
- 文字列
- ゾーン 10 進数
- パック 10 進数
- 2進数形式
とすることができます。
外部記述を使用する場合は、さらにデータタイプが増えますが、各データタイプとCのデータ型との
対応については、内部/外部記述の章を見て下さい。
RPGプログラムの内部では、内部数値はパック 10 進数で扱われます。
(例外は、データストラクチャーのサブフィールドなどで定義されいている場合です。)
そのため、何の指定もせずにRPGプログラム内で数値定義を行うと、そのフィールドは
パック 10 進数となります。
RPGプログラムでその他の数値、ゾーン 10 進数、2進数形式を定義する場合は、I仕様書を利用します。
IDATAS1 DS
I B 1 20BIN2
IDATAS2 DS
I B 1 40BIN4
IDATAS3 DS
I 1 100ZONE
|
BIN2 は2バイトの2進数形式 (short int に相当)
BIN4 は4バイトの2進数形式 ( int に相当)
ZONE は10バイトのゾーン 10 進数 (一般のCでは持っていないデータ型となります。)
[Cプログラムで利用する場合は?]
AS/400では、ヘッダーファイル decimal.h にパック10進数のデータ型が定義されています。
このヘッダーファイルをインクルードすると、パック10進数の型は decimal(n,p) がり利用出来ます。
ここでn は、パック 10 進定数の桁を表し、p は、少数部の桁数です。
deciaml(9.2) aaa;
の様に定義します。
文字定数で記述する場合は、
12345.99D または 12345.99d
の様に定義します。
ゾーン 10 進数 は文字型の配列 char[n]で対応します。符号の処理のみ必要ですが、文字としては
同じ値となります。
ゾーンを他のデータ型に変換する為の関数もAS/400では、用意されているので利用可能です。
QXXDTOP | 浮動小数点をパック10進数に変換する |
QXXITOP | 整数をパック10進数に変換する |
QXXPTOD | パック10進数をdoubleに変換する |
QXXPTOI | パック10進数を整数に変換する |
QXXITOZ | 整数をゾーン10進数に変換する |
QXXDTOZ | doubleをゾーン10進数に変換する |
QXXZTOD | ゾーン10進数をdoubleに変換する |
QXXZTOI | ゾーン10進数を整数に変換する |
|