在Float中,为什么?

时间:2010-12-04 06:08:08

标签: c# types floating-point

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

4 个答案:

答案 0 :(得分:10)

浮点范围(约±3.4e38) 大于长范围(约±9.22e18),即使长度具有更高的精度。

答案 1 :(得分:5)

  

有两个原因

<强> 1。值范围(即最大值)。

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

因为, float 的最大值是   大于,即long包含在float中。

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?

答案 2 :(得分:1)

long表示Int64类型,即整数,而float表示单一类型,即浮点数。即使long的大小大于float的大小,也不可能在不丢失信息的情况下从float转换为整数。

有关long和float类型的更多信息,请参阅msdn。

答案 3 :(得分:0)

人们已经提到了float和long的范围,但更简单的一点是你不能表示整数中最可能的浮点数。如果你的浮点数是3.14159,则long可以表示的两个最接近的值是3或4 - 两者都完全错误。浮点数可以表示介于3和4之间的数十亿个值。如果程序员想要表示类似整数的值,那么程序员最不可能首先使用浮点值 - 这将是一个非常糟糕的设计决策。所以隐式转换float-&gt; int太危险了,因为几乎肯定会丢失的数据几乎肯定是重要的。这不是我们经常故意做的事情,当我们这样做时,我们通常喜欢将其显式化(Math.Floor(floatValue))。

以相反的方向(int - &gt; float),浮点数通常可以“充分”表示整数值。浮点数的警告是数字只能存储为近似值 - 值越大,表示的数字就越不准确。然而,浮动的准确性大约是6个有效数字 - 有损,但你只会损失原始值的百万分之一左右。在许多情况下,这将是微不足道的。 (在 重要的情况下,程序员总是会非常小心地将浮点数变成计算,因此在实践中很少会引起问题)。因此,允许在这个方向上进行隐式转换更方便/有用,因为这是我们有意做的事情。