2009-02-13 89 views
1

我碰到這條線的一些代碼來了,找不到的語法定義的任何地方:C類型轉換的替代方法?

*(float *)csCoord.nX = lImportHeight* .04f; /* magic number to scale font size */ 

如果我刪除f.04f那麼編譯器提供了一個關於可能的數據丟失警告由於從'轉換雙'到'浮動'。我假設f正在進行某種類型的類型轉換。

有沒有人見過這個? C標準在哪裏定義?

回答

10

尾隨f表示的編譯器,它是一個浮子式文字,就像「」表示一個文字串和L後綴表示一個長整型。

C++ spec for literals是一樣的。

0

不知道它在該標準的定義,但您使用的f指示浮動,否則編譯器假定它是一個雙。同樣,您可以通過添加u或長l(小寫ell)等指定要無符號的整數。

2

沒有「f」,數量0.04是雙精度值。當你用雙倍數的lImportHeight倍數時,你會得到兩倍。然後將其存儲在浮點大小的內存位置,從而失去精度。用「f」,0.04f是一個浮點數字。你用它多重lImportHeight,你會得到一個浮點數;那麼分配不會導致精度損失。

0

到底是什麼問題?你的編譯器在.04f上窒息嗎?嘗試

(float) .04 
+0

不,它編譯罰款。我以前從來沒有見過這種語法,並希望確保我的理解它。 – Tim 2009-02-13 21:32:28