2011-04-08 88 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並從任何返回整數通常返回的位置函數讀取,這將導致無意義的答案。

相關問題