strtod() - strtof() - strtold() — 文字ストリングから double、浮動、および long double への変換
形式
#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);言語レベル
ANSI
スレッド・セーフ
はい
ロケール依存
これらの関数の振る舞いは、現行ロケールの LC_CTYPE カテゴリーおよび LC_NUMERIC カテゴリーの影響を受ける可能性があります。 詳しくは、 CCSID とロケールについてを参照してください。
説明
strtod()、 strtof()、および strtold() 関数は、文字ストリングを double、float、または long double 値に変換します。 パラメーター nptr は、
数値バイナリー浮動小数点値として解釈できる文字のシーケンスを示します。 これらの関数によって、数値の一部として認識できないストリングは、
先頭文字のところで読み取りが停止されます。 この文字は、ストリングの最後にある
ヌル文字である場合もあります。
strtod()、 strtof()、および strtold() 関数は、 nptr が以下の形式のストリングを指すことを想定しています。
最初の文字がこの形式に適合しない場合、走査は停止されます。 さらに、以下のシーケンスがあります。INFINITYまたはNAN(大/小文字を無視して) 許可されます。
指数が 16 進数字形式で指定された場合、その指数は 2 進 (底 2) 指数として解釈されます。 指数が 10 進数字形式で指定された場合、その指数は 10 進 (底 10) 指数として解釈されます。
戻り値
strtod()、 strtof()、および strtold() 関数は、表現によってアンダーフローまたはオーバーフローが発生する場合を除き、浮動小数点数の値を戻します。 オーバーフローの場合、 strtof() は HUGE_VALF または -HUGE_VALFを返し、 strtod() strtold() は HUGE_VAL または -HUGE_VALを返します。 アンダーフローの場合、すべての関数は
0 を戻します。
どちらの場合も、errno は ERANGE に設定されます。 nptr が指すストリングが期待される形式でない場合、変換は実行されず、 nptr の値は、 endptr が NULL ポインターでなければ、 endptrが指すオブジェクトに保管されます。
strtod()、 strtof()、および strtold() 関数は、指数として読み取られる E または e の後に数字以外の文字があっても失敗しません。 例えば、100elf は
浮動小数点値 100.0 に変換されます。
以下の文字シーケンスINFINITY(大/小文字を無視して) INFINITY の値を生成します。 文字値:NANこれにより、Quiet Not-A-Number (NAN) 値が生成されます。
例
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
char *string, *stopstring;
double x;
float f;
long double ld;
string = "3.1415926This stopped it";
f = strtof(string, &stopstring);
printf("string = \"%s\"\n", string);
printf(" strtof = %f\n", f);
printf(" Stopped scan at \"%s\"\n\n", stopstring);
string = "100ergs";
f = strtof(string, &stopstring);
printf("string = \"%s\"\n", string);
printf(" strtof = %f\n", f);
printf(" Stopped scan at \"%s\"\n\n", stopstring);
string = "3.1415926This stopped it";
x = strtod(string, &stopstring);
printf("string = \"%s\"\n", string);
printf(" strtod = %f\n", x);
printf(" Stopped scan at \"%s\"\n\n", stopstring);
string = "100ergs";
x = strtod(string, &stopstring);
printf("string = \"%s\"\n", string);
printf(" strtod = %f\n", x);
printf(" Stopped scan at \"%s\"\n\n", stopstring);
string = "3.1415926This stopped it";
ld = strtold(string, &stopstring);
printf("string = \"%s\"\n", string);
printf(" strtold = %lf\n", ld);
printf(" Stopped scan at \"%s\"\n\n", stopstring);
string = "100ergs";
ld = strtold(string, &stopstring);
printf("string = \"%s\"\n", string);
printf(" strtold = %lf\n", ld);
printf(" Stopped scan at \"%s\"\n\n", stopstring);
}
/***************** Output should be similar to: *****************
string = "3.1415926This stopped it"
strtof = 3.141593
Stopped scan at "This stopped it"
string = "100ergs"
strtof = 100.000000
Stopped scan at "ergs"
string = "3.1415926This stopped it"
strtod = 3.141593
Stopped scan at "This stopped it"
string = "100ergs"
strtod = 100.000000
Stopped scan at "ergs"
string = "3.1415926This stopped it"
strtold = 3.141593
Stopped scan at "This stopped it"
string = "100ergs"
strtold = 100.000000
Stopped scan at "ergs"
*/
関連情報
- atof() — 文字の文字列を浮動小数点に変換する
- atoi() — 文字の文字列を整数に変換する
- atol() – atoll() — 文字の文字列を長整数または項目の多い長整数に変換する
- strtod32()- strtod64()- strtod128()-文字ストリングから 10 進浮動小数点への変換
- strtol() – strtoll() — 文字の文字列を長整数または項目の多い長整数に変換する
- strtoul() - strtoull() — 文字ストリングを符号なしの長整数および符号なしの長整数 ( 長整数 ) に変換する
- wcstod ()-wcstof ()-wcstold ()-ワイド文字ストリングから Double、Float、および Long Double への変換
- wcstod32()- wcstod64()- wcstod128()-ワイド文字ストリングから 10 進浮動小数点への変換
- <stdlib.h>
