2011-07-23 115 views

回答

6

是的!

他們是一樣的東西。

還有沒有指令直接比較一個浮點數到一個整數,所以它首先將整數轉換爲float


但是:

注意:那請問意味着int至 - float轉換是無損。它仍然會丟失一些信息,所以這段代碼:

(int)(float)integer == integer 

並不總是爲true! (與int.MaxValue一起去看看,與double/long同上。)

+4

值得注意的是,雖然'1000000001>(float)1000000000' wo ;;返回false,這是因爲後者的數量並不真正代表「1,000,000,000」。相反,它代表「999,999,968和1,000,000,032之間的數字」;前者的數量並不明顯大於後者。請注意,1222333443將等於1222333444f,但1222333443.0將比較大於1222333444f,因爲後者將被強制轉換爲1222333440.0(浮點數與雙精度轉換之間的轉換由較少特定轉換爲更具體的「擴展」 - 與其他類型相反)。 – supercat

+0

@supercat:心靈==吹 – Mehrdad

3

是的。沒有>(float, int)運算符 - >(int,int)和>(float, float)。因此,編譯器通過將第二個操作數轉換爲float來調用後者。有關詳細信息,請參閱C#規範的部分7.3.6.2:

二元數值提升是針對預定義的操作數+, - ,*,/%,&,|,^,==,=! >,<,> =和< =二元運算符。二進制數字提升隱式地將兩個操作數轉換爲一個通用類型,在非關係運算符的情況下,它也成爲操作的結果類型。

(然後,它列出了涉及的步驟。)

您確保intfloat轉換過程中大量的時間有關係嗎?它應該很便宜。