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(“当差值非常小,到我的规定精度,认为相等”);