好的,我有一个char
类型的数字。我该如何将它转换成double
类型?
char c;
我尝试过(double)c
,但它会被转换成零。
有任何想法吗?
好的,我有一个char
类型的数字。我该如何将它转换成double
类型?
char c;
我尝试过(double)c
,但它会被转换成零。
有任何想法吗?
如果你有一个以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);
atof
而不是atoi
。 - iabdalkaderatol
用于整数,atof
用于双精度浮点数,但实际上你不应该使用它们,查看更新内容。 - iabdalkader回答你提出的问题:
#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
至+127
或0
至+255
。它最常用于存储字符值,如'x'
,但也可以用于存储小整数。
但我猜想您真正想知道的是如何将一个字符串(如"1234.5"
)转换为具有数值1234.5
的double
类型。 有几种方法可以做到这一点。
atof()
函数接受指向字符串的char*
,并返回一个double
值;atof("1234.5")
返回1234.5
。但是它不会进行任何实际的错误处理;如果参数过大或不是数字,则可能表现不佳。(我不确定具体细节,但我相信在某些情况下其行为是未定义的。)
strtod()
函数执行相同的操作,更加健壮,但使用起来更加复杂。请参阅您的系统文档(如果您在类Unix系统上,请使用man strtod
命令查看相关信息)。
正如Coodey在评论中所说,您需要使问题更加精确。如果有实际代码示例,则会更容易弄清楚您正在询问的内容。
double
吗?请更加精确地描述你的问题。 - qwertzatoi()
将字符串转换为int
;OP想要一个double
。而且他的问题并不清楚;请看我的回答。 - Keith Thompson