strtod |
| ||||
strtod | |
ヘッダ | #include <stdlib.h> |
形 式 | double strtod(const char *nptr, char **endptr); |
機 能 | nptrが指す文字列の最初の部分を、double型の表現に変換する。 まず始めに、入力文字列を次の三つの部分に分割する。 第1の部分 … isspace関数の規定による空白類文字の並び(空でもよい)。 第2の部分 … 変換対象列。浮動小数点定数と同様の形式の文字の並び、C99 C11 あるいは無限大またはNaNを表現する文字の並び 第3の部分 … 認識の対象とならない文字の1文字以上の末尾の文字列(入力文字列の終了を示すナル文字を含む) 次に、変換対象列の部分を浮動小数点数に変換し、その結果を返す。 変換対象列の認識可能な形式は、省略可能な正符号または負符号に、次のいずれか一つが続く形式である。
変換対象列が浮動小数点数として認識可能な形式であるとき、最初の数字または小数点文字(のどちらか最初に現れた方)で始まる文字の列を浮動小数点定数として解釈する。ただし、以下を除外する。
C99 C11 文字の並びINFおよびINFINITYは、返却値の型で表現可能である場合、無限大と解釈する。そうでない場合、返却値の型の範囲を超えて大きい浮動小数点定数と同じ規則の動作とする。また、文字の並びNANおよびNAN(n文字列opt)は、返却値の型でサポートしている場合、qNaNと解釈する。そうでない場合、変換対象列が認識可能な形式をもたない場合と同じ規則の動作とする。 C99 C11 変換対象列が16進形式であり、FLT_RADIXが2のべき乗である場合、変換の結果の値は、正しく丸められる。 "C"ロケール以外では、付加的に処理系定義の変換対象列の形式を受理しても構わない。 変換対象列が空であるかまたは認識可能な形式でないとき、変換は行わない。このとき、endptrが空ポインタでなければ、nptrの値をendptrが指すオブジェクトに格納する。 |
返却値 | 変換が可能であれば変換した値を返し、不可能であれば0を返す。正しい値が表現可能な値の範囲外であるとき、(返却値の符号にしたがって)正または負のHUGE_VALを返し、errnoにはマクロERANGEの値を格納する。 変換結果がアンダフローを起こすときは、errnoにはマクロERANGEの値を格納して、以下の値を返す。
|
補 足 | n文字列の意味は、処理系定義とする(処理系は、NaNの有効数字部の中に表現する付加情報を決定するためにn文字列を使用できる)。 変換対象列が負符号で始まるときに、負符号をもつ変換対象列を直接負数に変換するか、対応する符号無しの列から変換した結果を負数化することで変換するかは、未規定である。丸めが正の無限大方向や、負の無限大方向の場合二つの方法での結果は異なる。いずれの場合も、浮動小数点算術が符号付き0をサポートしている場合、関数は0の符号を正しく処理することができる。 |