strtod32() - strtod64() - strtod128() — 文字ストリングから 10 進浮動小数点への変換
形式
#define __STDC_WANT_DEC_FP__
#include <stdlib.h>
_Decimal32 strtod32(const char *nptr, char **endptr);
_Decimal64 strtod64(const char *nptr, char **endptr);
_Decimal128 strtod132(const char *nptr, char **endptr);言語レベル
ANSI
スレッド・セーフ
はい
ロケール依存
これらの関数の振る舞いは、現行ロケールの LC_CTYPE カテゴリーおよび LC_NUMERIC カテゴリーの影響を受ける可能性があります。 詳しくは、 CCSID とロケールについてを参照してください。
説明
strtod32()、 strtod64()、および strtod128() 関数は、文字ストリングを単精度、倍精度、または 4 倍精度の 10 進浮動小数点値に変換します。 パラメーター nptr は、数値 10 進浮動小数点値として解釈できる
文字のシーケンスを示します。 これらの関数によって、数値の一部として認識できないストリングは、
先頭文字のところで読み取りが停止されます。 この文字は、ストリングの最後にある
ヌル文字である場合もあります。 endptr パラメーターは、
endptr が NULL ポインターでない場合、この文字を指すように更新されます。
strtod32()、 strtod64()、および strtod128() 関数は、 nptr が以下の形式のストリングを指すことを想定しています。
最初の文字がこの形式に適合しない場合、走査は停止されます。 さらに、以下のシーケンスがあります。INFINITYまたはNAN(大/小文字を無視して) 許可されます。
戻り値
strtod32()、 strtod64()、および strtod128() 関数は、表現によってアンダーフローまたはオーバーフローが発生する場合を除き、浮動小数点数の値を戻します。 オーバーフローの場合、 strtod32() は HUGE_VAL_D32 または -HUGE_VAL_D32を返し、 strtod64() は HUGE_VAL_D64 または -HUGE_VAL_D64を返します。 strtod128() は HUGE_VAL_D128 または -HUGE_VAL_D128を返します。 アンダーフローの場合、すべての関数は +0.E0 を戻します。
オーバーフローの場合もアンダーフローの場合も、errno は ERANGE に設定されます。 nptr が指すストリングが想定する形式ではない場合、 +0.E0 の値が戻されます。nptr の値は、 endptr が指すオブジェクトに保管されます (但し、endptr が NULL ポインターでない場合に限られます)。
strtod32()、 strtod64()、および strtod128() 関数は、指数として読み取られる E または e の後に数字以外の文字があっても失敗しません。 例えば、100elf は
浮動小数点値 100.0 に変換されます。
以下の文字シーケンスINFINITY(大/小文字を無視して) INFINITY の値を生成します。 文字値:NANは、Quiet Not-A-Number (NaN) 値を生成します。
戻り値は必要に応じて、丸めモード Round to Nearest、Ties to Even を使用して丸められます。
例
#define __STDC_WANT_DEC_FP__
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
char *string, *stopstring;
_Decimal32 d32;
_Decimal64 d64;
_Decimal128 d128;
string = "3.1415926This stopped it";
d32 = strtod32(string, &stopstring);
printf("string = %s\n", string);
printf(" strtod32 = %Hf\n", d32);
printf(" Stopped scan at %s\n\n", stopstring);
string = "100ergs";
d32 = strtod32(string, &stopstring);
printf("string = \"%s\"\n", string);
printf(" strtof = %Hf\n", d32);
printf(" Stopped scan at \"%s\"\n\n", stopstring);
string = "3.1415926This stopped it";
d64 = strtod64(string, &stopstring);
printf("string = %s\n", string);
printf(" strtod = %Df\n", d64);
printf(" Stopped scan at %s\n\n", stopstring);
string = "100ergs";
d64 = strtod64(string, &stopstring);
printf("string = \"%s\"\n", string);
printf(" strtod = %Df\n", d64);
printf(" Stopped scan at \"%s\"\n\n", stopstring);
string = "3.1415926This stopped it";
d128 = strtod128(string, &stopstring);
printf("string = %s\n", string);
printf(" strtold = %DDf\n", d128);
printf(" Stopped scan at %s\n\n", stopstring);
string = "100ergs";
d128 = strtod128(string, &stopstring);
printf("string = \"%s\"\n", string);
printf(" strtold = %DDf\n", d128);
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() — 文字の文字列を長整数または項目の多い長整数に変換する
- strtod ()-strtof ()-str含有 ()-文字ストリングから Double、Float、および Long Double への変換
- strtol() – strtoll() — 文字の文字列を長整数または項目の多い長整数に変換する
- strtoul() - strtoull() — 文字ストリングを符号なしの長整数および符号なしの長整数 ( 長整数 ) に変換する
- wcstod ()-wcstof ()-wcstold ()-ワイド文字ストリングから Double、Float、および Long Double への変換
- wcstod32()- wcstod64()- wcstod128()-ワイド文字ストリングから 10 進浮動小数点への変換
- <stdlib.h>
