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

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

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);
于 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+1270to +255。它最常用于存储字符值,例如'x',但也可用于存储小整数。

但我怀疑你真的很想知道如何将字符串转换为带有数值"1234.5"的类型。有几种方法可以做到这一点。 double1234.5

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

strtod()函数做同样的事情并且更健壮,但使用起来更复杂。请查阅您系统的文档(man strtod如果您使用的是类 Unix 系统)。

正如 Coodey 在评论中所说,您需要使您的问题更加精确。一个带有实际代码的例子会让你更容易弄清楚你在问什么。

于 2012-11-16T21:42:08.187 回答