- float 的长度比 long 小
- float 能表示数的范围比 long 大
容易得出结论:float 的数据密度比 long 稀疏
long 可以表示数据范围内的所有整数,但是 float 从来都只能在小范围内(相对来说),表示连续的整数和某些小数,换句话说,其精度有限。
int[] array={2147483647,21474836,2147483,9999999,10000000,16999998,16999999,17000005};
System.out.println();
for(int i=0;i<array.length;i++){
long a=array[i];
float b = (float) a;
System.out.println("long show: " + a);
System.out.println("float show: " + b);
System.out.println("------------------------");
}
运行结果如下:
在 Java 的基础数据类型中,基础中的基础是 int,在计算机中,没有比 int 更基础的数据类型了
尽管 boolean、char、byte、short 都比 int 要短,但是他们仍属于 int 基础之上的扩展。
boolean 是专门表示真假的值,用途很明确
char 是专门表示 ascii 字符的值,用途也很明确
byte 是一种更加基础的数据,是针对于内存单元的精确引用,也算明确
short 的存在是缩小了范围,对应于 long 相对 int 来说扩大了范围,简单地从内存空间与数据范围角度进行了扩展
那么,float 和 double 的存在意义就不那么清晰了
首先来看float,它的长度小于 long ,和 int 长度相同,却声称有更大的数据范围,以此自豪。然而我们不要忘了,有得必有失,float 的数据范围是建立在牺牲数据准确性的基础之上的。
如果我们看不到它背后的血肉模糊,而一味地为它强撑起来的高大身影而欢呼,坑了的还是自己。
float 特性,在用科学计数法表示时,最多只有8位小数。
- 在阈值1下,float可以准确表示所有绝对值小于阈值的整数
- 在阈值i 下,float可以表示带有 i 位小数的有理数
而需要说明的是,这里的阈值i 小于阈值1,而阈值1 远小于 int 类型的最大值。
综上,我总结出,float 类型的用法是:
总而言之,在精度要求不高时,使用 float,重点是,我们要知道,怎要的精度要求算是不高
- 在需要表示的小数还算小时,使用 float
- 在需要表示的大数不要求准确时,使用 float
float 的粗制滥造太过显而易见,double 的出现是为了用空间治疗 float 的模糊血肉 ,让其没有那么恐怖,至少长好表皮,蒙的了人,因为我们其实很少会到达属于 double 的阈值1,所以触不到天花板,在一定程度上就忽视了天花板的存在,罢了。
也就是说,double 的出现单纯是为了在 float 的基础上提高精度。
如果说,int 是最基本的数据类型
而 boolean 是表示真值的
char 是表示字符的
byte 是表示内存的
float 是表示小数的
那么,short 是为了为 int 节省空间,long 是为了为 int 扩大范围
double 是为了为 float 提高精度