strtod - ライブラリコールの説明 - Linux コマンド集 一覧表
名前
strtod, strtof, strtold - ASCII 文字列を浮動小数点実数に変換する
書式
#include <stdlib.h>
double strtod(const char *
nptr
, char **
endptr
);
#define _XOPEN_SOURCE=600
/* or #define _ISOC99_SOURCE */
#include <stdlib.h>
float strtof(const char *
nptr
, char **
endptr
);
long double strtold(const char *
nptr
, char **
endptr
);
説明
strtod
(),
strtof
(),
strtold
()関数は、
nptr
が指し示す文字列のはじめの部分を
double
,
float
,
long double
型の値にそれぞれ変換する。
入力する文字列 (の先頭部分) は以下の形式が期待されている。
先頭にホワイトスペース、
次にプラス ("+") またはマイナス ("-") の記号、
その後に (i) 10 進数、(ii) 16 進数、(iii) 無限、
(iv) NAN (計算できない数、not-a-number) のいずれかがある
(ホワイトスペース、符号は省略可能。
ホワイトスペースは isspace
(3) で識別される)。
"10 進数" は 1 文字以上の 10 進の数字の列からなり、 基を表す文字 (radix charater) (小数点。ロケールに依存するが、通常は ".") が含まれることもある。 この後に 10 進の指数部が続いても良い。 10 進の指数部は "E" または "e" と、その後に置かれる正負記号 (省略可)、 およびその後に続く 1 文字以上の 10 進の数字の列からなり、 10 の何乗であるかを表す。
"16 進数" は、"0x" または "0X" とその後に続く 1 文字以上の 16 進の数字の列からなり、 基を表す文字が含まれることもある。 この後に 2 進の指数部が続いても良い。 2 進の指数部は "P" または "p" と、その後に置かれる正負記号 (省略可)、 およびその後に続く 1 文字以上の 10 進の数字の列から構成され、 2 の何乗であるかを表す。 基を表す文字と 2 進の指数部は、どちらか一方しか存在してはならない。
無限 は "INF" または "INFINITY" で表され、大文字小文字は区別されない。
NAN
は "NAN" (大文字小文字は区別されない) で表され、
その後に `(' 文字列 ')' が続く場合もある。
この文字列は実装に依存する NAN を指定する。
返り値
これらの関数は、変換された値があれば、それを返す。
endptr
が NULL でないときは、変換に使われた最終文字の次の文字へのポインターが
endptr
で参照される場所へ保存される。
変換が行われなかったときには 0 が返る。そして
endptr
が参照している場所に
nptr
の値 (変換対象である文字列の開始アドレス) が保存される。
正しい形式の数値文字列であるが、変換結果がオーバーフローを起こした場合
には、プラスまたはマイナスの
HUGE_VAL
(
HUGE_VALF
,
HUGE_VALL
)が返り (値の符号による)、
ERANGE
が
errno
に代入される。変換結果がアンダーフローを起こした場合には 0 が返り、
ERANGE
が
errno
に代入される。
エラー
- ERANGE
- オーバーフローまたはアンダーフローが起こった。
準拠
C89 では strtod ()が、C99 では残りの 2 つの関数が記述されている。
注意
成功、失敗どちらの場合でも 0 を返す可能性があるので、 プログラムは呼び出す前に errno を 0 に設定し、呼び出し後に errno が 0 以外の値かどうかを確認しエラーが発生したかどうかを判断する 必要がある。
例
strtol (3) のマニュアルページの例を参照。 このページで説明した関数の使用方法も同様である。
関連項目
atof
(3),
atoi
(3),
atol
(3),
strtol
(3),
strtoul
(3)