wcstod() - wcstof() - wcstold() — ワイド文字ストリングから double、浮動、および long double への変換

形式

#include <wchar.h>
double wcstod(const wchar_t *nptr, wchar_t **endptr);
float wcstof(const wchar_t *nptr, wchar_t **endptr);
long double wcstold(const wchar_t *nptr, wchar_t **endptr);

言語レベル

XPG4

スレッド・セーフ

はい

ロケール依存

コンパイル・コマンドで LOCALETYPE(*LOCALE) が指定される場合、この関数の振る舞いは、現行ロケールの LC_CTYPE カテゴリーおよび LC_NUMERIC カテゴリーの影響を受ける可能性があります。 また、コンパイル・コマンドで LOCALETYPE(*LOCALEUCS2) または LOCALETYPE(*LOCALEUTF) が指定されている場合、この関数の振る舞いは、現行ロケールの LC_UNI_CTYPE カテゴリーおよび LC_UNI_NUMERIC カテゴリーの影響も受ける可能性があります。 この関数は、コンパイル・コマンドに対して LOCALETYPE(*CLD) が指定されている場合には使用できません。 詳しくは、 CCSID とロケールについてを参照してください。

ワイド文字関数

詳しくは、 ワイド文字 を参照してください。

説明

wcstod()wcstof()wcstold() 関数は、 nptr が指すワイド文字ストリングの初期部分を double、float、または long double 値に変換します。 nptr パラメーターは、 数値バイナリー浮動小数点値として解釈できる文字のシーケンスを指します。 これらの関数は、数値の一部として認識できない文字に遭遇すると、その時点でストリングの読み取りを停止します。 この文字は、ストリングの最後にある wchar_t ヌル文字である場合があります。

wcstod()wcstof()wcstold() 関数は、nptr が以下の形式のストリングを指すことを想定しています。
構文図を読むビジュアル構文図をスキップwhitespace +  – 数字.数字.数字eE +  – 数字0xX16 進数字.16 進数字.16 進数字pP +  – 数字

最初の文字がこの形式に適合しない場合、走査は停止されます。 さらに、以下のシーケンスがあります。INFINITYまたはNAN(大/小文字を無視して) 許可されます。

指数が 16 進数字形式で指定された場合、その指数は 2 進 (底 2) 指数として解釈されます。 指数が 10 進数字形式で指定された場合、その指数は 10 進 (底 10) 指数として解釈されます。

戻り値

wcstod()wcstof()wcstold() 関数は、変換された double、float、または long double の値を戻します。 変換を実行できなかった場合は、これらの関数は 0 を戻します。 正しい値が表現可能な値の範囲外にある場合、これらの関数は +HUGE_VAL または -HUGE_VAL ( 値の符号に従って ) を戻し、errno を ERANGE に設定します。 正しい値がアンダーフローを引き起こした場合、これらの関数は 0 を戻し、errno は ERANGE に設定されます。 nptr が指すストリングが空であるか、想定される形式になっていない場合には、 変換は行われません。nptr の値は、 endptr が NULL ポインターでない場合に endptr が指すオブジェクトに保管されます。

wcstod()wcstof()wcstold() 関数は、指数として読み取られる E または e の後に数字以外の文字があっても失敗しません。 例えば、100elf は 浮動小数点値 100.0 に変換されます。

errno の値は ERANGE (範囲エラー) に 設定される可能性があります。

以下の文字シーケンスINFINITY(大/小文字を無視して) INFINITY の値を生成します。 文字値:NANこれにより、Quiet Not-A-Number (NAN) 値が生成されます。

この例では、 wcstod()wcstof()wcstold() 関数を使用して、ストリング wcs を double 値、float 値、および long double 値に変換します。
#include <stdio.h>
#include <wchar.h>
 
int main(void)
{
   wchar_t *wcs = L"3.1415926This stopped it";
   wchar_t *stopwcs;
 
   printf("wcs = \"%ls\"\n", wcs);
   printf("   wcstod = %f\n", wcstod(wcs, &stopwcs));
   printf("   Stop scanning at \"%ls\"\n", stopwcs);

   printf("   wcstof = %f\n", wcstof(wcs, &stopwcs));
   printf("   Stop scanning at \"%ls\"\n", stopwcs);
   printf("   wcstold = %lf\n", wcstold(wcs, &stopwcs));
   printf("   Stop scanning at \"%ls\"\n", stopwcs);
   return 0;
 
   /**************************************************
      The output should be similar to:
 
      wcs = "3.1415926This stopped it"
         wcstod = 3.141593
         Stop scanning at "This stopped it"
         wcstof = 3.141593                  
         Stop scanning at "This stopped it" 
         wcstold = 3.141593                 
         Stop scanning at "This stopped it" 
   **************************************************/
}

関連情報