将char转换为double

16

好的,我有一个char类型的数字。我该如何将它转换成double类型?

char c;

我尝试过(double)c,但它会被转换成零。

有任何想法吗?


1
你想将ASCII代码转换为double吗?请更加精确地描述你的问题。 - qwertz
@Aleksandar:atoi()将字符串转换为int;OP想要一个double。而且他的问题并不清楚;请看我的回答。 - Keith Thompson
2个回答

32

如果你有一个以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将字符串转换为int,并使用strtod将其转换为double,这些函数具有更好的错误处理:

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

请注意,"成功时,该函数将以int值的形式返回转换后的整数"。 - Maroun
1
@Maroun85,那是atof而不是atoi - iabdalkader
1
@Omkant atol 用于整数,atof 用于双精度浮点数,但实际上你不应该使用它们,查看更新内容。 - iabdalkader
@KeithThompson 因此请注意 - iabdalkader
@KeithThompson 我已经把这个加到了笔记里,谢谢。 - iabdalkader
显示剩余3条评论

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',但也可以用于存储小整数。

但我猜想您真正想知道的是如何将一个字符串(如"1234.5")转换为具有数值1234.5double类型。 有几种方法可以做到这一点。

atof()函数接受指向字符串的char*,并返回一个double值;atof("1234.5")返回1234.5。但是它不会进行任何实际的错误处理;如果参数过大或不是数字,则可能表现不佳。(我不确定具体细节,但我相信在某些情况下其行为是未定义的。)

strtod()函数执行相同的操作,更加健壮,但使用起来更加复杂。请参阅您的系统文档(如果您在类Unix系统上,请使用man strtod命令查看相关信息)。

正如Coodey在评论中所说,您需要使问题更加精确。如果有实际代码示例,则会更容易弄清楚您正在询问的内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接