将char转换为double

时间:2012-11-16 20:54:37

标签: c

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

char c;

我已尝试(double)c,但它会转换为零。

有什么想法吗?

2 个答案:

答案 0 :(得分:27)

如果您希望将 null终止字符串转换为双重使用atof

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

如果您有一个角色,则投射应该有效:

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),另请参阅Keith的注释关于某些值的未定义行为,所以关键是您应该使用strtol将字符串转换为intstrtod以转换为double那些有更好的错误处理:

const char *str = "3.14";
double x = strtod(str, NULL);

答案 1 :(得分: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是整数类型;其范围通常为-128+1270+255。它最常用于存储像'x'这样的字符值,但它也可用于存储小整数。

但我怀疑你真的想知道如何将字符 string (如"1234.5")转换为使用数值double输入1234.5。有几种方法可以做到这一点。

atof()函数使用指向字符串的char*,并返回double值; atof("1234.5")返回1234.5。但它没有真正的错误处理;如果参数太大,或者不是数字,它可能表现得很糟糕。 (我不确定具体细节,但我认为在某些情况下其行为尚未定义。)

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

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