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、浮動、および long double の値に変換します。nptr パラメーターは、 数値バイナリー浮動小数点値として解釈できる文字のシーケンスを指します。 これらの関数は、数値の一部として認識できない文字に遭遇すると、その時点でストリングの読み取りを停止します。この文字は、ストリングの最後にある wchar_t ヌル文字である場合があります。

wcstod()wcstof()wcstold() 関数は、nptr が以下の形式のストリングを指すことを想定しています。
構文図を読む構文図をスキップする
>>-+------------+--+-----+-------------------------------------->
   '-whitespace-'  +- + -+   
                   '- – -'   

>--+-+-digits--+---+--+--------+-+--+------------------------+-----------------+-><
   | |         '-.-'  '-digits-' |  '-+-e-+--+-----+--digits-'                 |   
   | '-.--digits-----------------'    '-E-'  +- + -+                           |   
   |                                         '- – -'                           |   
   '-0--+-x-+--+-hexdigits--+---+--+-----------+-+--+------------------------+-'   
        '-X-'  |            '-.-'  '-hexdigits-' |  '-+-p-+--+-----+--digits-'     
               '-.--hexdigits--------------------'    '-P-'  +- + -+               
                                                             '- – -'               

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

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

戻り値

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

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

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

INFINITY (大/小文字を区別しない) の文字シーケンスは、INFINITY の値をもたらします。NAN の文字値は、Quiet Not-A-Number (NAN) 値をもたらします。

この例では、wcstod()wcstof()wcstold() 関数を使用して、ストリング wcs を double、浮動、および 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" 
   **************************************************/
}