java的float是一个大约数,在float进行比较时,往往会出现一些出乎意料的结果
例如,在下面的程序中,虽然f1并不等于f2,但输出是true,因为f1足够大约等于f1-1。而f3赋值0.3,却不等于0.3,因为0.3取float精度丢失太多
public static void main(String[] arg) {
float f1 = 8748787848788F;
float f2 = f1 - 1;
System.out.println(f1 == f2); // true
float f3 = 0.3f;
System.out.println(f3==0.3); // false
}
虽然double也是浮点数,但并不会出现上面的情况,float不精确,double精确。
此外,若浮点数中,小数部分为0时,或其他不丢精度的,float又是精确的。
double d1=1.0d;
float d2=1.0f;
System.out.println("d1==d2 "+(d1==d2)); // true