C言語編 標準ライブラリのリファレンス strtod

先頭へ戻る

strtod関数

概要 文字列を double型に変換する。
ヘッダ stdlib.h
形式 double strtod(const char* s, char** endptr);
引数 s 対象の文字列。
endptr 変換できない最初の文字へのポインタを受け取るポインタ。不要であれば、ヌルポインタでも構わない。
戻り値 正常に変換された場合は、double型に変換された結果。
変換結果が、表現可能な範囲を超えている場合は、正しい結果が正ならば +HUGE_VAL、負ならば -HUGE_VAL が返される。
変換結果が、アンダーフローを起こす場合には、C95 までは 0 を返し、C99以降では double型で最も小さな正規化された正の数以下の絶対値をもつ値を返す。
最初の文字の時点ですでに変換不能な場合、0 が返される。
詳細 文字列を浮動小数点数とみなし、double型の値として返す。浮動小数点数として認識できない文字に行き当たると、その文字を指すポインタを引数endptr が指すポインタに渡す。引数endptr がヌルポインタの場合は、単に変換をその段階で中止する。
先頭に符号 "+" や "-" があっても構わない。
変換結果が、表現可能な範囲を超えている場合、errnoERANGE が格納される。また、アンダーフローを起こす場合に、errno に ERANGE を格納する処理系もある。
注意 エラーの有無は errno によって調べなければならない。正常な変換によって 0 が得られる可能性があるため、戻り値だけで判定することは不可能である。
使用例
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <errno.h>

int main(void)
{
    double d;
    char* s = NULL;

    errno = 0;
    d = strtod( "-51.3705abc", &s );
    if( errno != 0 ){
        fputs( "結果が表現できない\n", stderr );
        exit( EXIT_FAILURE );
    }

    printf( "%f\n", d );
    if( s != NULL ){
        puts( s );
    }

    return 0;
}

実行結果:

-51.370500
abc
関連 strtol関数は long型に、strtoul関数は unsigned long型に変換できる。また、atoi関数atol関数atof関数は、それぞれ仕様が単純だが、エラー検出が行えない。
C99 の場合には更に、float型に変換する strtof関数、long double型に変換する strtold関数、long long型に変換する strtoll関数がある。
解説章 第45章


参考リンク

更新履歴

'2018/4/20 「NULL」という表記を「ヌルポインタ」に修正。

'2018/4/17 全体的に文章を見直し修正。

'2018/1/22 新規作成。





標準ライブラリのリファレンス(名前順)のトップページへ

標準ライブラリのリファレンス(ヘッダ別)のトップページへ

C言語編のトップページへ

Programming Place Plus のトップページへ


このエントリーをはてなブックマークに追加
rss1.0 取得ボタン RSS