在Float中,为什么?

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 

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

有两个原因

1.值范围(即最大值)。

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

因为, float的最大值大于long,即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 

在这里,同样从上面的例子看,浮点数似乎可以包含长数据,但反之亦然。

编辑:关于数据类型的大小,请参阅我的问题。值的范围取决于数据类型的大小?

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

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

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

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