strtod, strtof, strtold - ASCII
文字列を浮動小数点実数に変換する
#include <stdlib.h>
double strtod(const char *nptr, char
**endptr);
float strtof(const char *nptr, char
**endptr);
long double strtold(const char *nptr, char
**endptr);
glibc
向けの機能検査マクロの要件
(
feature_test_macros(7) 参照):
strtof(),
strtold():
_XOPEN_SOURCE >= 600 ||
_ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L;
または
cc -std=c99
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)
この文書について¶
この man ページは Linux
man-pages
プロジェクトのリリース
3.41 の一部
である。プロジェクトの説明とバグ報告に関する情報は
http://www.kernel.org/doc/man-pages/
に書かれている。