我有以下代码无法正常运行。
char dec_number[300];
dec_number[0]='\0';
//some code that reads a decimal number and stores it in dec_number
//I get in dec_number 0.19
当我打印该值时,我得到0.19
。
之后我想将它与某些东西相乘,所以我需要将它存储为double。
我使用double k=atod(dec_number);
和k=strtod(dec_number, NULL);
将其转换为加倍。但我得9716
或大的东西,但0.19
附近没有。
我做错了什么?有什么建议?谢谢。
答案 0 :(得分:1)
显然你是错误地转换它。这里没有人有心灵感应能力(我推测),所以在你向我们展示你将你的字符串转换为double
的代码之前,没有办法说出你做错了什么。
无论如何,将字符串转换为double
的正确方法是使用strtod
函数。
char *end;
double d = strtod(dec_number, &end);
/* Perform error handling be examining `errno` and, if necessary, `end` */
您使用的是strtod
吗?
答案 1 :(得分:1)
你有#include <stdlib.h>
吗?如果不是,它可能假设atof或strtod应返回int
并从任何返回整数的位置函数读取通常返回,这将导致无意义的答案。
答案 2 :(得分:0)
只需使用atof
功能:
#include <cstdlib>
char *str_number = "0.19";
double val = atof(str_number);
答案 3 :(得分:0)
如果没有看到更多代码,我的猜测是,当您读入数字时,您不会终止dec_number
。
答案 4 :(得分:0)
使用以空字符结尾的字符串atof
和strtod
执行您想要的操作但非常宽容。
如果你不想接受像“42life”这样的字符串有效,你可以像这样包裹strtod
:
double strict_strtod(char* str)
{
char* endptr;
double value = strtod(str, &endptr);
if (*endptr) return 0;
return value;
}
答案 5 :(得分:0)
试试这个:
double k;
sscanf(dec_number,"%lf",&k);
// k is the double value stored in the buffer
sprintf(buffer,"%f",k)
// buffer is now containing the representation of k
答案 6 :(得分:-1)
使用parseFloat(),它应该可以工作。