long b = 99;
float c = 99.0F;
//b = c; //Error : Cannot implicitly convert type 'float' to 'long'.
c = b; // Running Successfully. Why?
为什么数据类型的大小没有问题并且隐式转换?
我们知道float
和long
的大小不同,以下是......
Console.WriteLine("Long : " + sizeof(long)); // Output --> Long : 8
Console.WriteLine("Float : " + sizeof(float));// Output --> Float: 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个有效数字 - 有损,但你只会损失原始值的百万分之一左右。在许多情况下,这将是微不足道的。 (在 重要的情况下,程序员总是会非常小心地将浮点数变成计算,因此在实践中很少会引起问题)。因此,允许在这个方向上进行隐式转换更方便/有用,因为这是我们有意做的事情。