strtof、strtod、または strD. サブルーチン

目的

ストリングを倍精度数値に変換します。

構文

#include <stdlib.h>

float strtof (nptr, endptr)
const char *restrict nptr;
char **restrict endptr;

double strtod ( nptr,  endptr)
const char *nptr
char**endptr;

long double strtold (nptr, endptr)
const char *restrict nptr;
char **restrict endptr;

説明

strtofstrtod、および strさん サブルーチンは、 nptr が指す文字列の最初の部分を doubleに変換します。 浮動小数点および long double 表現。 最初に、これらは入力ストリングを次の 3 つの部分に分解します。
  • 空白文字 (isspace() によって指定された) の先頭シーケンス (空の場合がある)。
  • 浮動小数点定数として解釈されるか、無限大または NAN を表現するサブジェクト・シーケンス。
  • 入力ストリングの終了ヌル・バイトを含む、1 つ以上の認識不能文字からなる最終ストリング。

その後、サブジェクト・シーケンスの浮動小数点数への変換を 試みてから、結果を戻します。

サブジェクト・シーケンスの予期される形式は、オプションの正符号 (+) または負符号 (-)、および以下のいずれかです。
  • オプションで基数文字とオプションの指数部を含む、空でない 10 進数のシーケンス
  • 0x または 0X、およびオプションで基数文字とオプションの 2 進指数部を含む、空でない 16 進数字のシーケンス
  • INF または INFINITY のいずれか (大/小文字を無視)
  • NAN または NAN (n-char-sequence opt ) のいずれか。NAN 部分の大/小文字を無視します。ここで、
    n-char-sequence:
    	 	digit
     		nondigit
    		n-char-sequence digit
    		n-char-sequence nondigit

サブジェクト・シーケンスは、最初の非空白ワイド文字から始まる、入力ストリングの最長の初期サブシーケンスとして定義されて います。これが想定される形式です。 サブジェクト・シーケンスは、入力ストリングが期待した形式でない場合、文字を含みません。

サブジェクト・シーケンスに浮動小数点数の予期される形式がある場合、最初の数字または小数点文字 (いずれか最初に発生した方) で始まる文字のシーケンスは、C 言語の浮動定数として解釈されます。ただし、ピリオドの代わりに基数文字が使用され、指数部も基数文字も 10 進浮動小数点の部分に表示されない場合、または小数点の部分に表示されます。 ストリングの最後の数字の後に、値がゼロの適切なタイプの指数部分があると想定されます。

サブジェクト・シーケンスが負符号 (-) で始まる場合には、シーケンスは無効になったと解釈されます。 文字シーケンス INF または INFINITY は、戻りの型で表現可能な場合は無限大として解釈され、そうでない場合は戻りの型の範囲に対して大きすぎる浮動定数として解釈されます。 文字シーケンス NAN または NAN(n-char-sequenceopt) は、戻り値の型でサポートされていれば、静かなNaN,として解釈され、そうでなければ、期待される形式を持たない主語シーケンス部分であるかのように解釈される。 n文字シーケンスの意味は、インプリメンテーションによって定義されます。 endptr パラメーターが NULL ポインターでない場合は、 endptr パラメーターが指すオブジェクトに、最後のストリングを指すポインターが保管されます。

サブジェクト・シーケンスが 16 進形式の場合、変換の結果の値は正しく丸められます。

基数文字は、プログラムのロケール (カテゴリー LC_NUMERIC) で定義されます。 POSIX ロケール、または基数文字が定義されていないロケールでは、基数文字はデフォルトでピリオドになります。

C または POSIX 以外のロケールでは、他のインプリメンテーション定義のサブジェクト・シーケンスが受け入れられる場合があります。

サブジェクト・シーケンスが空であるか、予期される形式でない場合、変換は実行されません。 endptr が NULL ポインターでない場合は、 str の値は endptrが指すオブジェクトに保管されます。

strtod サブルーチンは、正常に実行された場合、 errno グローバル変数の設定値を変更しません。

0 はエラー時に戻され、成功時にも有効な戻り値であるため、エラー状態を検査するアプリケーションは errno を 0 に設定し、 strtof または strICATION サブルーチンを呼び出してから、 errnoを検査する必要があります。

注: IBM® AIX® 6 (テクノロジー・レベル 7) および IBM AIX 7 (テクノロジー・レベル 1)以降、倍精度および長倍精度の値について、浮動小数点変換ルーチン、printf および scanf 関数ファミリーの精度が 17 桁から 37 桁に増加しました。

パラメーター

項目 説明
nptr (nptr) 変換する文字列を指定します。
endptr 最後のストリングを指します。

戻り値

正常終了すると、 strtof および strted サブルーチンは、変換された値を戻します。 変換を実行できなかった場合は、0 が戻され、 errno グローバル変数が EINVAL に設定される可能性があります。

正しい値が表現可能な値の範囲外である場合、 HUGE_VALHUGE_VALF、または HUGE_VALL が (値の符号に従って) 戻され、 errno が ERANGE に設定されます。

正しい値がアンダーフローの原因となる場合は、絶対値が戻りの型で正規化された最小の正数以下の値が戻され、 errno グローバル変数が ERANGE に設定されます。

エラー・コード

注: 値 0 はエラーまたは有効な結果のいずれかを示す可能性があるため、 strtod, strtofを使用してエラーを検査するアプリケーションは、 および str市場 サブルーチンは、サブルーチン呼び出しの前に errno グローバル変数を 0 に設定する必要があります。 アプリケーションは、サブルーチン呼び出しの後に errno グローバル変数を検査することができます。

NumberPointer が指すストリングが空であるか、認識されない文字で始まる場合、 strtodstrtof、および str用の サブルーチンに対して値 0 が返されます。

変換を実行できない場合は、値 0 が戻され、エラーを示すために errno グローバル変数が設定されます。

変換によってオーバーフローが発生した場合 (つまり、値が表現可能な値の範囲外にある場合)、 +/- HUGE_VAL が、オーバーフローの方向を示す符号とともに戻されます。 また、 errno グローバル変数は ERANGEに設定されます。

変換によってアンダーフローが発生する場合は、適切に符号が付けられた値 0 が戻され、 errno グローバル変数が ERANGEに設定されます。

strtodstrtofstrtoldサブルーチンでは、EndPointerパラメータの値が(char**) NULLでない場合、サブルーチンを停止した文字へのポインタが*EndPointerに格納される。 浮動小数点値が形成できない場合、*EndPointerNumberPointerに設定される

strtof サブルーチンには、1 つの丸め誤差しかありません。 ( strtod サブルーチンを使用して倍精度浮動小数点数を作成し、その倍精度数値を浮動小数点数に変換すると、2 つの丸めエラーが発生する可能性があります。)