2012-11-16 206 views
9

好的,我有一個char這是一個數字。我怎麼能把它轉換成double?我試過(double)c,但它轉換爲零。將char轉換爲double

任何想法?

+1

你想在'double'中轉換ascii代碼嗎?讓你的問題更精確。 – qwertz

+0

@Aleksandar:'atoi()'將字符串轉換爲'int'; OP想要一個「雙」。目前還不清楚他在問什麼;看到我的答案。 –

回答

26

,如果你有一個空值終止的,你想轉換到雙用途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),另請參閱基思關於未定義行爲的意見,所以關鍵是你應該使用strtol從字符串轉換爲intstrtod轉換到double那些有更好的錯誤處理:

const char *str = "3.14"; 
double x = strtod(str, NULL); 
+0

請注意,「成功時,函數將轉換後的整數作爲整型值返回」。 – Maroun

+1

@ Maroun85'atof'不是'atoi' – iabdalkader

+0

對不起:)我的錯! – Maroun

5

要回答你問的問題:

#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+1270+255。它最常用於存儲像'x'這樣的字符值,但它也可以用來存儲小整數。

但我懷疑你真的想知道如何將一個字符轉換字符串,像"1234.5",與數值1234.5鍵入double。有幾種方法可以做到這一點。

atof()函數需要一個char*指向一個字符串,並返回一個double值; atof("1234.5")返回1234.5。但它並沒有真正的錯誤處理;如果論證太大,或者不是數字,它可能表現不好。 (我不確定這些細節,但我相信它的行爲在某些情況下是不確定的。)

strtod()函數執行相同的操作並且更健壯,但使用起來更加複雜。如果您使用的是類Unix系統,請查閱您的系統文檔(man strtod)。

而Coodey在評論中說,你需要讓你的問題更加精確。實際代碼的一個例子會讓你更容易弄清你正在問什麼。