float , double , long 数据类型的精度问题

float: 1bit(符号位)+ 8bits(指数位) +  23bits(尾数位)

double: 1bit(符号位)+  11bits(指数位)+ 52bits(尾数位)

float和double的范围是由指数的位数来决定的

float的范围为-2^128 ~ +2^128,也即-3.40E+38 ~ +3.40E+38;

double的范围为-2^1024 ~ +2^1024,也即-1.79E+308 ~ +1.79E+308。 

float和double的精度是由尾数的位数决定的。

float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;

double:2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位。

 

在低于2的23次方时,float类型精度高于int 类型,高于的时候精度低于int 类型。 Float 不安全,慎用,跟钱相关的慎用

在低于2的52次方时,float类型精度高于long 类型,高于的时候精度低于long 类型。

 

基本类型:short 二进制位数:16
包装类:java.lang.Short
最小值:Short.MIN_VALUE=-32768 (-2的15此方)
最大值:Short.MAX_VALUE=32767 (2的15次方-1)

 

基本类型:int 二进制位数:32
包装类:java.lang.Integer
最小值:Integer.MIN_VALUE= -2147483648 (-2的31次方)
最大值:Integer.MAX_VALUE= 2147483647  (2的31次方-1)

 

long 二进制位数:64

long最大值是9223372036854775807(2^64-1)。

long最小值是-9223372036854775808(-2^64)

long的最大值写法:long l = 9223372036854775807L;
long的最小值写法:long l =- 9223372036854775808L;
备注:后面的一个L,必须加上去。

猜你喜欢

转载自blog.csdn.net/qq_34851243/article/details/90981534