名前 | 形式 | 機能説明 | 戻り値 | エラー | 使用法 | 属性 | 関連項目
#include <wchar.h>double wcstod(const wchar_t *nptr, wchar_t **endptr);
wcstod() と wstod() の両関数は、nptr が示すワイド文字列の先頭部分を double 型の表現に変換します。まず、指定されたワイド文字列を 3 つの部分に分けます。初めの部分は、iswspace(3C) で識別される空白のワイド文字コードの並びで、空の場合もあります。次が変換対象となる文字コードの並びで、浮動小数点数として解釈されます。最後の部分は、解釈不能なワイド文字コードの並びで、これには入力文字列の終わりの NULL ワイド文字コードも含まれます。分割後、変換対象となる文字コードの並びを浮動小数点数に変換しようと試み、その結果を返します。
変換対象となる文字コードの並びとして期待される形式は、先頭が + または - の符号 (なくても可) で、その後が小数点を含むまたは含まない 1 つ以上の数字の集まりで、必要であれば最後に指数部が続きます。指数部は、文字 e または E で、その後にオプションとして符号やいくつかの 10 進数を付加することもできます。変換対象となる文字コードの並びとは、入力ワイド文字列中の最初の空白でないワイド文字コードで始まる、期待された形式の、最長のワイド文字コードの並びであると定義できます。入力ワイド文字列が空の場合、または空白を表すワイド文字コードだけからなる場合、または最初の空白でないワイド文字コードが符号でも数字でも小数点でもない場合、変換対象となる文字コードの並びにはワイド文字コードが 1 つも含まれません。
変換対象となる文字コードの並びの形式が期待どおりの場合、最初の数字または小数点 (どちらか最初に現れた方) で始まる一連のワイド文字コードは、C 言語で定義される浮動小数点数であると解釈されます。C 言語の定義と異なる点は、ピリオドの代わりに小数点が使われること、指数も小数点も現れなければワイド文字列中の最後の数字の後に小数点が続くと見なされることです。変換対象となる文字コードの並びが負の符号 (–) で始まっている場合、変換の結果として得られた値は負となります。endptr が示すオブジェクトには、最終部分のワイド文字列へのポインタが書き込まれます。ただし endptr が NULL ポインタの場合を除きます。
小数点はプログラムのロケール (LC_NUMERIC カテゴリ) 中に定義されます。POSIX ロケール、および小数点が定義されていないロケールにおいては、小数点のデフォルト値はピリオド ( . ) となります。
ロケールが POSIX 以外の場合、そのシステム固有の他の変換対象となる文字コードの並び形式も使用できます。
変換対象となる文字コードの並びが空の場合、または期待された形式ではない場合、変換処理は行われません。またこのとき、endptr が示すオブジェクトには、nptr の値が書き込まれます。ただし endptr が NULL ポインタの場合を除きます。
watof(str) 関数は wstod(str, (wchar_t **)NULL) と同じです。
wcstod() および wstod() 関数は、変換された値 (もしあれば) を返します。変換が行われなかった場合、0 が返されます。このとき、errno は EINVAL の値に設定されることがあります。
正しい値が表現可能な値の範囲外であれば、±HUGE_VAL のどれか (値の符号による) が返され、errno は ERANGE の値に設定されます。
正しい値がアンダフローを起こしてしまうものであれば、0 が返され、errno は ERANGE の値に設定されます。
wcstod() および wstod() 関数は、以下の状態のときエラーを返します。
返されるべき値が、オーバフローまたはアンダフローを起こしてしまう
wcstod() および wcstod() 関数は、以下の状態のときエラーを返します。
変換が実行できない
エラー発生時には 0 が返されますが、これは正常終了の場合にも返される値です。したがってエラー発生の有無を知りたいアプリケーションは、errno を 0 に設定して wcstod() または wstod() を呼び出し、処理実行後に errno の値を調べる必要があります。値が 0 以外であれば、エラーが起こったものと判断できます。
次の属性については attributes(5) のマニュアルページを参照してください。
属性タイプ | 属性値 |
---|---|
MT レベル | MT-Safe |