将字符串转换为double

时间:2011-04-08 22:47:31

标签: c string numbers

我有以下代码无法正常运行。

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附近没有。

我做错了什么?有什么建议?谢谢。

7 个答案:

答案 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)

使用以空字符结尾的字符串atofstrtod执行您想要的操作但非常宽容。
如果你不想接受像“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(),它应该可以工作。