2010-12-04 60 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位有效数字 - 有损失的,但您只会损失原始价值的百万分之一左右。在许多情况下,这将是微不足道的。 (在其中显着的情况下,程序员将总是非常小心地将浮点数引入计算中,所以在实践中很少引起问题)。因此,允许向这个方向进行隐式转换更为方便/有用,因为这是我们故意做的很多事情。