2010-12-04 63 views
8
long b = 99; 
float c = 99.0F; 
//b = c; //Error : Cannot implicitly convert type 'float' to 'long'. 
c = b; // Running Successfully. Why? 

爲什麼沒有關於數據類型大小和隱式轉換的問題?
floatlong的大小是不同的,因爲我們知道,並且在下面給出...長期浮動,爲什麼?

Console.WriteLine("Long : " + sizeof(long)); // Output --> Long : 8 
Console.WriteLine("Float : " + sizeof(float));// Output --> Float: 4 

回答

9

浮子的範圍(約±3.4E38)比長的範圍(約大。± 9.22e18),儘管長期的精度更高。

+0

浮點數的精確長度是多少? – jak 2010-12-04 06:16:14

+0

浮點數有23位精度。 http://en.wikipedia.org/wiki/Single_precision_floating-point_format – 2010-12-04 06:27:06

1

long表示Int64類型,即整數,而float表示單一類型,即浮點數。即使long的大小大於float的大小,也不可能從float轉換爲整數,而不會丟失信息。

有關long和float類型的更多信息,請參閱msdn。

5

有2個原因

1值的範圍(即,最大值)。

+--------------+-----------------------------+ 
| data type |  Maximum Value  | 
+--------------+-----------------------------+ 
|    |        | 
| long  |  9223372036854775807  | 
|    |        | 
| float  |  3.402823E+38   | 
|    |        | 
+--------------+-----------------------------+ 

如,浮子的最大值是 大於即長包含內浮動。

So, float= long is possible 
but, long = float is not possible 

2.優勢
不能直接分配一個浮點值轉換成整數(非浮動)值,而無需顯式轉換。

float a=90  //correct 
float b=90.0f; //correct 

long a=90  //correct 
long b=90.0f; //wrong 

這裏,也是從上面的例子似乎漂浮能夠包含長的數據,但反過來是不可能的。

編輯: 有關數據類型的大小看我的問題Is Range of value depends upon Size of datatype?

0

人都提到浮動和長期的範圍,但一個簡單的問題是,你不能代表最有可能浮動點數在一個整數中。如果你的浮點數是3.14159,那麼long表示的最接近的兩個值可能是3或4 - 都是完全錯誤的。浮點數可以表示數十億之間的值,介於3和4之間。如果程序員想要表示整數類型的值,那麼首先使用浮點數作爲值的可能性非常小 - 這將是一個非常糟糕的設計決策。所以隱含地轉換float-> int就太危險了,因爲你幾乎肯定會丟失的數據幾乎肯定是重要的。這不是我們經常故意做的事情,當我們做時,我們通常喜歡將其明確化(Math.Floor(floatValue))。

往相反的方向(int - > float),float通常可以「充分地」表示一個整數值。浮點的警告是數字只能作爲近似值存儲 - 數值越大,表示的準確度越低。然而,浮動的準確性大約有6位有效數字 - 有損失的,但您只會損失原始價值的百萬分之一左右。在許多情況下,這將是微不足道的。 (在其中顯着的情況下,程序員將總是非常小心地將浮點數引入計算中,所以在實踐中很少引起問題)。因此,允許向這個方向進行隱式轉換更爲方便/有用,因爲這是我們故意做的很多事情。