int main()
{
double n = 1.2;
printf("%f\n", n);
printf("%lf", n);
return 0;
}
輸出結果如下:
苦思不得其解,轉向度娘,尋得些許意見:該問題的出現應該與編譯器及C語言標準有關
http://www.cnblogs.com/mayswind/p/3473353.html
printf()函數使用%f格式說明符打印十進制計數法的float和double數字,用%e打印指數計數法的數字。
打印long double類型需要%Lf、%Le、和%La說明符。
注意:float和double類型的輸出都使用%f說明符.
一樣的問題:
http://www.cnblogs.com/chucklu/p/4021575.html
include <stdio.h>
main()
{
printf("%f\n",5);
}
爲什麼屏幕輸出的結果是0.000000,但是如果是(float)5,結果就正確,請詳細說明
用cc編譯printf("%f\n",5)爲什麼是0.000000,而不是5.000000,哪方面的問題,編譯器、系統,還是說C語言本身就有這個問題,請詳細說明原因
1,之所以沒輸出5,這是C語言設計的原因。
2,之所以輸出0,這是計算機體系結構的問題。
具體來說:
printf函數不會進行任何類型轉換,它只是從內存中讀出你所提供的元素的值(按照%d,%f等控制字符提示的格式)。C語言設計中,int類型一般是32bit或者16bit,而float一般是64bit,並且有可能使用科學計數保存。這點就和huhugo88所說一樣,5在內存中爲00000000,00000101。而且5一般都在靜態區,程序的靜態存儲區默認是0,那麼當用%f來讀時,就會讀64bit,也就是會讀之前的很多位0,最後按照(有效數字)×(基數2)pow(指數)的方式來取數,自然結果是0
之所以Vc中不允許這種情況,而有些編譯器就允許這麼輸出就是編譯器設置的問題。按理說,這樣訪問內存是屬於越界訪問,應該禁止。不過只是讀,傷害性不大而已。