将char转换为double

Fra*_*ank 13 c

好的,我有char一个数字.我怎么能把它转换成double

char c;
Run Code Online (Sandbox Code Playgroud)

我试过了(double)c,但它转换为零.

有任何想法吗?

iab*_*der 28

如果你有一个空的终止字符串,你希望转换为双重使用atof:

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

如果你有一个角色,那么施法应该有效:

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

如果字符为零,那么它当然会打印零:

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

注意:atof类似的函数不检测溢出并且在出错时返回零,因此无法知道它是否失败(不确定它是否设置errno),另请参阅Keith关于某些值的未定义行为的注释,所以关键是你应该使用strtol从字符串转换为intstrtod转换到double那些有更好的错误处理:

const char *str = "3.14";
double x = strtod(str, NULL);
Run Code Online (Sandbox Code Playgroud)


Kei*_*son 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;
}
Run Code Online (Sandbox Code Playgroud)

char是整数类型; 其范围通常要么-128+1270+255.它最常用于存储字符值'x',但它也可用于存储小整数.

但我怀疑你真的想知道如何转换字符串,比如"1234.5",double用数值键入1234.5.有几种方法可以做到这一点.

atof()函数将a char*指向一个字符串,并返回一个double值; atof("1234.5")回报1234.5.但它没有真正的错误处理; 如果参数太大,或者不是数字,它可能表现得很糟糕.(我不确定其中的细节,但我相信在某些情况下它的行为是不确定的.)

strtod()函数执行相同的操作并且更加健壮,但使用起来更复杂.请参阅系统的文档(man strtod如果您使用的是类Unix系统).

正如Coodey在评论中所说,你需要更加准确地提出问题.使用实际代码的示例可以更容易地找出您所要求的内容.