ホームC言語Tips集数学 ≫ 文字列を double 型に変換する

C言語Tips集 - 文字列を double 型に変換する

C言語で文字列を double 型に変換するには,stdlib.hatof 関数か,strtod 関数を使用します.

#include <stdlib.h>

atof

double atof(const char *nptr);

strtod

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

atof 関数は,nptr が指す文字列のはじめの数字の部分を double 型に変換する関数です.

strtod 関数は,atof 関数と同じで,nptr が指す文字列のはじめの数字の部分を double 型に変換する関数ですが,変換不可能な文字列があった場合に,その文字列へのポインタを第 2 引数 endptr に格納します.

C言語サンプルプログラム

atof 関数と strtod 関数をそれぞれ使用して,入力された文字列を double 型に変換するサンプルプログラムを以下に示します.

/* header files */
#include <stdio.h>
#include <stdlib.h>

/* macros */
#define N 256

/* main */
int main(void) {
    char s[N] = {'\0'}, *endptr;
    double x1, x2;

    /* 入力 */
    fgets(s, N, stdin);
    printf("変換前: %s", s);

    /* 変換 */
    x1 = atof(s);
    x2 = strtod(s, &endptr);

    /* 結果を表示 */
    printf("atof 関数で変換: %.2f\n", x1);
    printf("strtod 関数で変換: %.2f\n", x2);
    printf("endptr の値: %s\n", endptr);

    return EXIT_SUCCESS;
}

実行例

サンプルプログラムの実行結果は以下のようになります.

( 3.14 を入力 )
変換前: 3.14
atof 関数で変換: 3.14
strtod 関数で変換: 3.14
endptr の値: 

( 10hoge を入力 )
変換前: 10hoge
atof 関数で変換: 10.00
strtod 関数で変換: 10.00
endptr の値: hoge

( hoge10 を入力 )
変換前: hoge10
atof 関数で変換: 0.00
strtod 関数で変換: 0.00
endptr の値: hoge10

Cプログラマの必読書

たくさんあるC言語関連の書籍の中でも特に役に立った本です.よかったら参考にしてみてください.

C実践プログラミング 第3版

C言語の実践的参考書.少々値段は張りますが初心者を脱しようとしている人は絶対に読むべきです.
文法だけでなく,コーディングスタイルやデバッグなど文字通り「実践的」なことが書かれているので非常にためになります. オライリーの本は,読みにくい本が多いのですが本書はとても読みやすくオススメです.


C言語ポインタ完全制覇 (標準プログラマーズライブラリ)

ポインタの解説書としては最高の書籍です.
この1冊でポインタを完全に理解することができます.全くの初学者が読むには敷居が高いですが,入門書を読み終えた後に読むと非常に有益です.

変換