数字データ変換関数。
数字項目からC言語の数字データ型への変換(数字レコードデータ項目の参照)およびC言語の数字データ型から数字項目への変換(数字レコードテータ項目への設定)
数字項目の外部10進数とC言語で扱う数字データ型の間で相互にデータ変換を行います。数字項目のレコードデータ項目の参照/設定のときに使います。
関数は、数字項目の符号付き/なし、桁数および小数部桁数のあり/なしにより使い分けます。使分けと対応するC言語のデータ型を表に示します。
変換の種類 | 項目の属性 | 桁数 | 使用する関数 | C言語のデータ型 | |
---|---|---|---|---|---|
数字項目からC言語データ型へ (レコードデータ項目の参照) | 小数部なし | 符号なし | ~4 | ps_dectoushort | unsigned short |
~9 | ps_dectoulong | unsigned long | |||
符号付き | ~4 | ps_dectoshort | short | ||
~9 | ps_dectolong | long | |||
~15 | ps_dectodouble | double | |||
小数部あり | ~5 | ps_dectofloat | float | ||
~15 | ps_dectodouble | double | |||
C言語データ型から数字項目へ (レコードデータ項目への設定) | 小数部なし | 符号なし | ~4 | ps_ushorttodec | unsigned short |
~9 | ps_ulongtodec | unsigned long | |||
符号付き | ~4 | ps_shorttodec | short | ||
~9 | ps_longtodec | long | |||
~15 | ps_doubletodec | double | |||
小数部あり | ~5 | ps_floattodec(注) | float | ||
~15 | ps_doubletodec(注) | double |
注)ps_floattodec関数およびps_doubletodec関数は指定した小数部桁数+1桁目で入力データを四捨五入します。
PSUSHORT PSFUNCTION ps_dectoushort (
PSUSHORT type,
PSPVOID pDec,
PSUSHORT leng);
PSSHORT PSFUNCTION ps_dectoshort (
PSUSHORT type,
PSPVOID pDec,
PSUSHORT leng);
PSULONG PSFUNCTION ps_dectoulong (
PSUSHORT type,
PSPVOID pDec,
PSUSHORT leng);
PSLONG PSFUNCTION ps_dectolong (
PSUSHORT type,
PSPVOID pDec,
PSUSHORT leng);
PSFLOAT PSFUNCTION ps_dectofloat (
PSUSHORT type,
PSPVOID pDec,
PSUSHORT leng,
PSUSHORT frac);
PSDOUBLE PSFUNCTION ps_dectodouble (
PSUSHORT type,
PSPVOID pDec,
PSUSHORT leng,
PSUSHORT frac);
PSVOID PSFUNCTION ps_ushorttodec (
PSUSHORT in1,
PSUSHORT type,
PSPVOID pDec,
PSUSHORT leng);
PSVOID PSFUNCTION ps_shorttodec (
PSSHORT in2,
PSUSHORT type,
PSPVOID pDec,
PSUSHORT leng);
PSVOID PSFUNCTION ps_ulongtodec (
PSULONG in3,
PSUSHORT type,
PSPVOID pDec,
PSUSHORT leng);
PSVOID PSFUNCTION ps_longtodec (
PSLONG in4,
PSUSHORT type,
PSPVOID pDec,
PSUSHORT leng);
PSVOID PSFUNCTION ps_floattodec (
PSFLOAT in5,
PSUSHORT type,
PSPVOID pDec,
PSUSHORT leng,
PSUSHORT frac);
PSVOID PSFUNCTION ps_doubletodec (
PSDOUBLE in6,
PSUSHORT type,
PSPVOID pDec,
PSUSHORT leng,
PSUSHORT frac);
in1~in6 | : | C言語の数字データ型から数字項目への変換の場合、変換元のデータを指定します。 | ||
type | : | 以下の関数を使う場合、pDecに指定する数字項目の符号付き/なしを指定します。それ以外の関数を使う場合は、0を設定します。ps_dectofloat、ps_dectodouble、ps_floattodec、ps_doubletodec値とその意味は以下のとおりです。 | ||
PS_DECIMAL_UNSIGNED | : | 符号なしです。 | ||
PS_DECIMAL_SIGNED | : | 符号付きです。 | ||
pDec | : | 数字項目のレコードデータ項目アドレスを指定します。 | ||
leng | : | pDecに指定する数字項目の桁数を指定します。定義体作成時に指定した値と同じ値を指定します。 | ||
frac | : | 以下の関数を使う場合は、pDecに指定する数字項目の小数部桁数を指定します。定義体作成時に指定した値と同じ値を指定します。 |
次に示す数字項目のレコードデータ項目の設定/参照の例を示します。なおレコード構造体名はSAMPLEです。
項目名R001の定義体の定義は、小数部なし、符号なし、桁数8、小数部桁数0です。
項目名R002の定義体の定義は、小数部なし、符号なし、桁数10、小数部桁数0です。
項目名R003の定義体の定義は、小数部あり、符号なし、桁数4、小数部桁数1です。
SAMPLE samp; /* レコードデータ領域を定義しています。*/ unsigned long ul; /* R001 のデータ格納用です。 */ double dl; /* R002 のデータ格納用です。 */ float fl; /* R003 のデータ格納用です。 */ ul = ps_dectoulong(0, samp.R001, 8); /* R001 の内容を変換しulに格納します。 */ ps_ulongtodec(ul, 0, samp.R001, sizeof(samp.R001)); /* R001 にulの内容を変換し設定します。 */ /* leng には直接8を設定しないで、 sizeof() を使っています。 */ dl = ps_dectodouble(PS_DECIMAL_UNSIGNED, samp.R002, sizeof(samp.R002), 0); /* R002 の内容を変換しdlに格納します。 */ /* R002 は小数部はなしです。ただし、桁数が10桁でlongでは扱えないため、 */ /* double を使い小数部桁数に0を指定します。 */ ps_doubletodec(dl, PS_DECIMAL_UNSIGNED, samp.R002, sizeof(samp.R002), 0); /* R002 にdlの内容を変換し設定します。 */ fl = ps_dectofloat(PS_DECIMAL_UNSIGNED, samp.R003, sizeof(samp.R003), 1); /* R003 の内容をflに変換し格納します。 */ ps_floattodec(fl, PS_DECIMAL_UNSIGNED, samp.R003, sizeof(samp.R003), 1); /* R003 にflの内容を変換し設定します。 */
以下の関数の場合、それぞれの変換結果が返されます。
ps_dectoushort, ps_dectoshort, ps_dectoulong, ps_dectolong, ps_dectofloat, ps_dectodouble
上の表の各関数の桁数を超える値をパラメタlengやfracに指定すると、変換結果は不定になります。
指定した全体桁数および小数部桁数を超えるデータは正しく変換しません。変換結果が不定になります。たとえば、ps_doubletodec関数に全体桁数=9、小数部桁数=8を指定して、入力データとして123.4を指定する場合などです。この場合は、指定した整数部桁数(全体桁数-小数部桁数)は1桁のところ、入力データの整数部が3桁(123)あるため正しく変換されません。