2011-04-08 90 views
0

我有下面的代码无法正常运行。将字符串转换为双精度值

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 k=atod(dec_number);k=strtod(dec_number, NULL);将其转换为双倍。但我得到9716或东西很大,但没有附近0.19

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

回答

1

您错误地将其转换,显然。此处没有人拥有心灵感应技能(我假设),因此在将字符串转换为double的位置向您显示您的代码之前,您无法说出自己做错了什么。

无论如何,将字符串转换为double的正确方法是使用strtod函数。

char *end; 
double d = strtod(dec_number, &end); 
/* Perform error handling be examining `errno` and, if necessary, `end` */ 

你使用的是strtod

0

只需使用atof功能:

#include <cstdlib> 

char *str_number = "0.19"; 
double val = atof(str_number); 
0

没有看到更多的代码,我的猜测是,当你阅读数字时,你并不是零终止dec_number

-1

使用parseFloat(),它应该工作。

+1

parseFloat()是一种Java方法!我们正在谈论C语言! – Franky 2011-04-08 23:24:26

0

以空字符结尾的字符串atofstrtod做你想要的,但是非常宽容。
如果你不想接受像 “42life” 为有效你可以用strtod这样的字符串:

double strict_strtod(char* str) 
{ 
    char* endptr; 
    double value = strtod(str, &endptr); 
    if (*endptr) return 0; 
    return value; 
} 
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 
1

你有没有#include <stdlib.h>?如果不是,它可能假设atof或strtod应该返回一个int并从任何返回整数通常返回的位置函数读取,这将导致无意义的答案。

相关问题