long类型可以隐式转换为float类型。
隐式转换也叫自动类型转换,即当我们要将一个变量类型中的值赋给另外一种类型的变量时,如果被赋值的变量字节大小大于准备赋值的变量字节大小,就可以自动转换成被赋值的变量类型。
但是这里long是8个字节,而float是4个字节,为什么反而能隐式转换呢?
两者表示数据的方式不一样,float采用IEEE的表示法,而long是用位数来控制的范围。
long和float从根本上讲它们表示的不是一类数,前者是精确值,而后者是非精确值。
float的字节宽度没有long大,但它的表现值宽度要宽得多,因此long到float是没有问题的。
long -9.2*10^18 ~~ 9.2*10^18
float -3.4*10^38 ~~ 3.4*10^38
可以看出来float表示的范围要比long的范围大,尽管float的位数少。
所以,占用内存多不表示它允许的取值范围大,long隐式转换成float只可能发生精确度下降,但不会导致数据丢失。 |