一个JAVA关于浮点类型的问题

来源:百度知道 编辑:UC知道 时间:2024/06/06 14:00:04
public class Number {
public static void main(String[] args){
float f1=0.14f;
float f2=0.3f;
float k3=0.34f;
//float dfe=(float) (f1+f2+k3);//类型强制转换
double dfe=f1+f2+k3 ;
float dfe1=f1+f2+k3;
System.out.println("The dfe's reasult is "+dfe);
System.out.println("The dfe1's reasult is "+dfe1);
}
}

打印结果是
The dfe's reasult is 0.7799999713897705
The dfe1's reasult is 0.78

为什么会是这个样子呢?

浮点数在做运算后是会出现误差的,这很正常。
double a=2.00-1.10;
double b=0.90;
System.out.print(a==b);
结果会输出false
所以有时在判断浮点数相等时会用到一个方法,那就是
public static boolean isEqual(double a,double b){
final double epsilon=0.00000001;
return Math.abs(a-b)<epsilon;
}
综上所述,浮点数经过运算后是会出现误差的,0.7799999713897705就是将float转化为double导致误差出现,0.78是float正常运算

float dfe1=f1+f2+k3;
这句话中的f1+f2+k3其实是转换为double类型运行的。做运算时float型会转换为double型,保证运算精度。然后结果再转化为float型,这中间就丢失了精度。所以结果会为0.78