2011-01-30 95 views
3
float f1 = 123.125; 
int i1 = -150; 

f1 = i1; // integer to floating conversion 
printf("%i assigned to an float produces %f\n", i1, f1); 

輸出:整數到浮動轉換用C

-150 assigned to an float produces -150.000000 

我的問題是爲什麼結果具有.而不是7或8或一些數量的後6個零(000000)?

回答

7

這就是printf所做的。見man page在那裏說

fF

雙參數應在風格「[ - ] ddd.ddd」轉換爲十進制表示,其中的數字基數後的數字符等於精度規格。 如果精度丟失,應視爲6;如果精度明確爲零且不存在'#'標誌,則不會出現基數字符。如果出現一個基數字符,至少有一個數字出現在它之前。低位數字應以實現定義的方式進行四捨五入。

(重點煤礦)

它無關,與150是如何表示爲存儲浮點數(事實上,它提升爲double因爲printf是可變參數)。

2

浮點運算不準確。 printf只顯示零的數字

從文檔:

的 小數點後位數默認數量爲6個,但可以用精密現場 改變。如果出現小數點 ,則至少會出現一個 數字。將「double」 的值四捨五入爲小數點後的正確數字 。

+0

爲什麼它附加了6個零。不是7或8個零。基於我的硬件的零的數量? – 2011-01-30 03:32:25

3

您看到的零的數量是由%fprintf轉換使用的默認精度的結果。它基本上與整數到浮點轉換無關。

3

因爲C標準(§7.19.6.1)說在沒有相反信息的情況下,%f會打印出6位小數。

f,F表示浮點數的雙參數被轉換爲 十進制表示在樣式[ - ] ddd.ddd,其中的數字 後的數字的小數點字符等於精確的規格。如果缺少 精度,則取爲6;如果精度爲零並且未指定#標誌 ,則不會顯示小數點字符。