2014-03-01 71 views
5

這兩個等價嗎?將浮點數轉換爲int,有無轉換

float f = 3.14; 
int i; 
i = f; // 3 

而且

float f = 3.14; 
int i; 
i = (int) f; // 3 
+0

它們是相同的。你爲什麼要問? – rjv

+0

都是一樣的......牛頓理論越來越複雜..:D –

+1

3 == 3,不是嗎? :P –

回答

8

編譯器處理這兩種情況的方式沒有區別。生成的機器碼將是相同的。但是,第一個是隱式轉換,第二個是顯式轉換。根據編譯器標誌,執行隱式轉換時可能會失去精度。

在附註上,文字3.14的類型爲double,這意味着在語句float f = 3.14中也可能存在精度損失。一個乾淨的方法是編寫float f = 3.14f,它指定這是 類型爲float的值3.14。

4

是那些是等價的,沒有任何區別。

+0

你是上帝。謝謝。 –

+0

@GeorgeNewton現在_god_祝福你了,它接受答案的時間:D +1 – P0W

5

它們是相同的。

在32位x86系統上使用GCC 4.8.2進行測試。

gcc -Wall -Wextra -Wpedantic在編譯這段代碼時不會給出任何警告,但是它會用-Wconversion

+0

它將與'-Wconversion' – MBlanc

+0

@MBlanc是的,你是對的。答案已更新。 –

0

編譯器足夠智能,可以同時處理這兩種情況。但我更喜歡第二種方法,因爲在大型程序中閱讀起來更容易。另外建議在顯式轉換中指定您正在投射的類型。最後,您的第一種方法可能無法在C#中工作。
Ref:http://msdn.microsoft.com/en-us/library/ms173105.aspx