16

わかりました、私はcharそれが数字です。どうすればそれをに変換できdoubleますか?

char c;

試しまし(double)cたが、ゼロに変換されます。

何か案は?

4

2 に答える 2

30

二重使用に変換したいヌル終了文字列がある場合atof

const char *str = "3.14";
double x = atof(str);
printf("%f\n", x); //prints 3.140000

キャラクターが 1 人の場合は、キャストが機能するはずです。

char c = 'a'; //97 in ASCII
double x = (double)c; 
printf("%f\n", x); //prints 97.000000

文字がゼロの場合、もちろんゼロを出力します。

char c = '\0';
double x = (double)c; 
printf("%f\n", x); //prints 0.000000

注:atof同様の関数はオーバーフローを検出せず、エラー時にゼロを返すため、失敗したかどうかを知る方法はありません(設定されているかどうかはわかりません)。特定の値の未定義の動作errnoに関するキースのコメントも参照してください。文字列から文字列への変換、および文字列への変換に使用すると、エラー処理が大幅に改善されます。strtolintstrtoddouble

const char *str = "3.14";
double x = strtod(str, NULL);
于 2012-11-16T21:02:17.543 に答える
5

あなたが尋ねた質問に答えるには:

#include <stdio.h>
int main(void) {
    char c = 42;
    // double d = (double)c; The cast is not needed here, because ...
    double d = c;    // ... the conversion is done implicitly.
    printf("c = %d\n", c);
    printf("d = %f\n", d);
    return 0;
}

char整数型です。通常、その範囲は-128to+127または0to+255です。のような文字値を格納するために最も一般的に使用されますが'x'、小さな整数を格納するためにも使用できます。

しかし、文字列( など"1234.5") をdouble数値に変換する方法を本当に知りたいと思っているのではないでしょうか1234.5。これを行うにはいくつかの方法があります。

このatof()関数はchar*、文字列を指す を受け取り、double値を返します。 atof("1234.5")戻ります1234.5。ただし、実際のエラー処理は行いません。引数が大きすぎるか、数値ではない場合、動作が悪くなる可能性があります。(詳細はわかりませんが、動作が未定義の場合もあると思います。)

関数は同じことを行い、strtod()はるかに堅牢ですが、使用するのはより複雑です。システムのドキュメントman strtodを参照してください (Unix 系のシステムを使用している場合)。

Coodey がコメントで述べたように、質問をより正確にする必要があります。実際のコードを使用した例は、あなたが何を求めているのかを理解しやすくするでしょう.

于 2012-11-16T21:42:08.187 に答える