STRTOD

Section: Linux Programmer's Manual (3)
Updated: 2007-07-26
Index JM Home Page roff page
 

名前

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; or 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) が返り (値の符号による)、 ERANGEerrno に代入される。変換結果がアンダーフローを起こした場合には 0 が返り、 ERANGEerrno に代入される。  

エラー

ERANGE
オーバーフローまたはアンダーフローが起こった。
 

準拠

C89 では strtod() が、C99 では残りの 2 つの関数が記述されている。  

注意

成功、失敗どちらの場合でも 0 を返す可能性があるので、 プログラムは呼び出す前に errno を 0 に設定し、呼び出し後に errno が 0 以外の値かどうかを確認しエラーが発生したかどうかを判断する 必要がある。  

strtol(3) のマニュアルページの例を参照。 このページで説明した関数の使用方法も同様である。  

関連項目

atof(3), atoi(3), atol(3), strtol(3), strtoul(3)


 

Index

名前
書式
説明
返り値
エラー
準拠
注意
関連項目

This document was created by man2html, using the manual pages.
Time: 04:32:06 GMT, November 19, 2007