2014-10-31 87 views
1

我正在學習C語言,並且在double乘法題目中遇到了問題。有關「雙倍」乘法的C編程

我需要打印原始值,然後double2*value

double num = 34.39; 
printf("Original value = %d, 2x original value = %d", num, num*2); 

我該怎麼做才能讓2x值真的是原來的2倍?

+0

'的printf( 「原始值=%克,2×原始值=%G」,NUM,NUM * 2 ); 「'? – someuser 2014-10-31 11:33:06

+2

你應該養成編譯所有警告和調試信息的習慣(如果使用[GCC](http://gcc.gnu.org/),'gcc -Wall -Wextra -g'),你應該*使用調試器*('gdb') – 2014-10-31 11:43:55

+0

請閱讀您正在使用的每個函數的文檔。請參見[printf(3)](http://man7.org/linux/man-pages/man3/printf.3.html ) – 2014-10-31 11:45:35

回答

7

你的乘法不是問題。

您的printf格式字符串是。 %d不適用於浮點值,但是對於整數,所以您會看到由於與編譯器斷開的合同而導致的廢話。

double num = 34.39; 
printf("Original value = %lf, 2x original value = %lf", num, num*2); 
+0

Ohhh right! 感謝您的幫助! – Joel 2014-10-31 11:35:47

+1

爲什麼你要參考作爲「與編譯器的契約」?編譯器只是在調用'printf'之前將浮點參數擴展爲8個字節(如果需要的話,這裏不是這種情況),將它稱爲「與'printf'合同?「 – 2014-10-31 11:39:50

+1

@barakmanos:是的;更一般地我的意思是」與C實現契約「,其中'printf'是其中的一部分。 – 2014-10-31 11:59:35

4

%d - 對於int
必須使用 「%F」 表示的printf

+0

就是這樣! Thx尋求幫助 – Joel 2014-10-31 11:39:42