double类型赋值给long类型变量报错
老师,double和long类型同样都占用8个字节,为什么将long var = 1.9e8;
赋值给long类型变量就会报错?写成long var = 1.9e8l;
也会报错,为什么只有将它强制转换long var = (long)1.9e8;
才可以?下面一句将long类型的var赋值给double类型就不会报错了呢?
7
收起
正在回答
1回答
同学你好~
1.long类型最大存储数据量是2的64次方,可以表示-2的63次方到2的63次方-1之间的数,而double可以表示大约-1.79E+308到-1.79E+308之间的数。可见两者不止是数据,而是数量级上都存在着巨大的差距,double可以存储的数据范围远大于long类型;
2.在Java中,存储数据时不仅是其所消耗的内存大小,还需要看其存储的方式。整数类型的数据都是直接将数据转化为二进制进行表示的,但是浮点型在存储时,不仅有表示精度的直译二进制,还有表示位数的次方数等等,其存储方式决定了,同样使用8字节,浮点数可以存储的数据范围相当巨大;
3.由于1.9e8这个数据本身已经超过long可以表示的数据范围,所以无论是否使用符号“L”,都无法转化为long类型数据,只能使用强制类型转换来进行数据的截取;
4.由于上面所说,long类型所能表达的数据范围远远小于double能够存储的范围,那么无论是什么样的long类型数据,一定会被double所涵盖,所以任何long类型数据都可以直接存储在double类型变量中,而无需进行任何标记或者转换。
祝学习愉快~
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星