floatdetail.java

单精度 float  4byte

双精度 double  8byte

浮点数在机器中存放形式:浮点数=符号位+指数位+尾数位

尾数位会丢失,造成精度损失(小数都是近似值)。

java的浮点型常量默认为double类型,如果要声明float类型,须后面加f或者F

浮点型有两种表示形式:

十进制数形式:5.12,  512.0f,  .512(小数点前的0可以省略)

科学计数法形式:5.12e2(5.12*10的2次方),5.12e-2(5.12*10的-2次方)

通常情况下,使用double型

比如,double num1=2.1234567891;

   float num2    =2.1234567891f;

输出num1和num2;

输出结果:num1=2.1234567891

       num2 =2.1234567

可以看到double型更精确。

浮点数使用陷阱:2.7和8.1/3比较,两者不相等。在数学上显然是相等的,但在计算机中,后者会造成精度损失,两者不相等。

所以当我们对运算结果是小数时进行判断,要小心。i

比如 num3=2.7;

  num4=8.1/3;

if(num3==num4)

System.out.println(“相等”);  -----很显然在计算机中这是不对的,什么也不会输出。

那么如何判断呢?  应该以两个数相差的绝对值,在某个精度范围内来判断。

比如 if(Math.abs(num3-num4)<0.000001)

System.out.println(“当差值非常小,到我的规定精度,认为相等”);