ページの先頭行へ戻る
MeFt V11.0 ユーザーズガイド
FUJITSU Software

7.7.1 数字データ変換関数

【提供インタフェース】

名前

数字データ変換関数。

  数字項目からC言語の数字データ型への変換(数字レコードデータ項目の参照)およびC言語の数字データ型から数字項目への変換(数字レコードテータ項目への設定)

【機能説明】

  数字項目の外部10進数とC言語で扱う数字データ型の間で相互にデータ変換を行います。数字項目のレコードデータ項目の参照/設定のときに使います。

  関数は、数字項目の符号付き/なし、桁数および小数部桁数のあり/なしにより使い分けます。使分けと対応するC言語のデータ型を表に示します。

表7.4 数字データ変換関数の使分けと対応する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桁目で入力データを四捨五入します。

[形式]
数字項目からC言語の数字データ型への変換(数字レコードデータ項目の参照)

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);

C言語の数字データ型から数字項目への変換(数字レコードテータ項目への設定)

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

:

数字項目のレコードデータ項目アドレスを指定します。
数字項目からC言語の数字データ型への変換の場合、変換元になります。C言語の数字データ型から数字項目への変換の場合、変換結果の格納先になります。

leng

:

pDecに指定する数字項目の桁数を指定します。定義体作成時に指定した値と同じ値を指定します。

frac

:

以下の関数を使う場合は、pDecに指定する数字項目の小数部桁数を指定します。定義体作成時に指定した値と同じ値を指定します。
ps_dectofloat, ps_dectodouble, ps_floattodec, ps_doubletodec

[使用例]

  次に示す数字項目のレコードデータ項目の設定/参照の例を示します。なおレコード構造体名は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)あるため正しく変換されません。