4

你可以一個int隱式轉換爲雙:double x = 5;爲什麼我不能隱式地將double轉換爲int?

您可以將INT顯式轉換爲雙:double x = (double) 5;

您可以顯式轉換雙爲int:int x = (int) 5.0;

爲什麼能你是否將一個double隱式轉換爲一個int?int x = 5.0;

+2

什麼語言? – 2014-10-06 02:45:14

+0

C#或Java。我認爲大多數語言都是如此。 – Evorlor 2014-10-06 02:46:29

+1

指定語言。只有幾種語言支持這種語法和概念,更不用說它是否屬實。 – 2014-10-06 02:49:44

回答

16

double的範圍比int寬。這就是爲什麼你需要明確演員。由於同樣的原因,你不能隱式地從long轉換爲int

long l = 234; 
int x = l; // error 
+1

當然!謝謝!!現在很明顯! – Evorlor 2014-10-06 03:00:32

+4

原因可能與撰寫明確的轉換表達,表明您已經同意可能會丟失數據 – Machinarius 2014-10-06 19:29:29

3

試想一下,你有這樣的一段代碼:

double x = pi/6; 
double y = sin(x); 

那麼y是0.5。 現在假設x被鑄造爲一個整數,如下所示:

int x = pi/6; 
double y = sin(x); 

在這種情況下,x將被截斷爲0,然後將SIN(0)將採取,即Y = 0。

這是爲什麼在許多強類型語言中未實現從double到int的隱式轉換的主要原因。

將int轉換爲double實際上增加了類型中的信息量,因此總是可以安全地進行。

16

隱式轉換僅可當你保證數據的丟失不會發生作爲轉換的結果。因此,您可以將integer轉換爲doubleinteger轉換爲long數據類型。然而,從double投射到integer會帶來丟失數據的風險。

Console.WriteLine ((int)5.5); 
// Output > 5 

這就是爲什麼微軟沒有爲此特定轉換編寫隱式轉換。相反,.NET框架會強制你使用明確的轉換來確保你通過明確地從一個類型轉換到另一個類型來做出明智的決定。

隱式關鍵字用於聲明隱式的用戶定義類型轉換運算符。如果確保轉換不會導致數據丟失,請使用它來啓用用戶定義類型與另一種類型之間的隱式轉換,即

來源>MSDN

+1

約在C#中的隱式轉換的唯一一致的規則的事實相關聯的是,隱式轉換隻在一個方向走。如果規則是隱式轉換不能「丟失數據」,那麼將禁止從「int」轉換爲「float」或從「long」轉換爲「float」或「double」,因爲這些轉換可能會返回舍入結果。之間的差的'float'到'int'鑄造和一個「任意數量的」 -to-'float' - 或'double'鑄造是'float'和'double'通常* *預期代表值已經受到一些舍入,而'int','long'等應該表示離散量。 – supercat 2014-10-06 16:12:23

+0

如果這個人得到了更多的讚揚,那麼對於未來的搜索者來說,不正確的答案是 – Evorlor 2014-10-08 16:59:01

4

C#遵循Java的類型系統,居各類鉛int - >long - >float - >double,並指定這似乎左側任意類型另一個可能會投給它。我個人認爲以這種方式排名類型是一個壞主意,因爲這意味着像long l = getSomeValue(); float f=l; double d=f;代碼編譯乾淨,儘管沒有精確嚴重的損失直接存儲到l相比d一個發牢騷;它也有其他不幸的後果。

我懷疑高斯林名列類型,他爲了做保證傳遞floatdouble到超載爲(float,float)(double,double)將使用後者的方法。不幸的是,他的排名有一個不幸的副作用,即將一個intlong傳遞給一個只有超載的方法,因爲floatdouble將導致該方法使用超載而不是double過載。

C#和.NET遵循Java的鉛在long至 - double寧願一個long至 - float轉換;有一兩件事,從一些隨之而來的方法超載恐怖的「拯救」他們的是,幾乎所有重載floatdouble .NET框架的方法也有一個過載Decimal,並且Decimal和其他浮動之間不存在隱式轉換點類型。因此,嘗試將long傳遞給過載爲float,doubleDecimal而不是long的方法將導致編譯錯誤,而不是轉換爲float。順便提一下,即使選擇允許隱式轉換的人更多地考慮了這個問題,也不可能允許從浮點類型(例如double)到離散類型(例如int)的隱式轉換。除此之外,對於在某些情況下產生2.9999999999994將一個計算的結果最好的整數表示是2,而在其他情況下,這將是三,在轉換有時可能需要做的一種方式,有時其他情況下,這種語言通常要求程序員指出實際意圖。

相關問題