浮点数运算精度丢失
浮点数 float 或 double 运算时的精度丢失
浮点数 float 或 double 运算时的精度问题场景
先从简单的反直觉的四则运算看起。对几个简单的浮点数进行加减乘除运算:
public class DoubleAndFloatPrecision {
public static void main(String[] args) {
System.out.println(0.1+0.2);
System.out.println(1.0-0.8);
System.out.println(5.015*100);
System.out.println(123.3/100);
double doubleExample1 = 2.15;
double doubleExample2 = 1.10;
boolean doubleResult = doubleExample1 - doubleExample2 == 1.05;
System.out.println("double类型计算结果精度是否准确: " + doubleResult);
System.out.println("double类型计算结果为: " + (doubleExample1 - doubleExample2));
float floatExample1 = 2.15f;
float floatExample2 = 1.10f;
boolean floatResult = floatExample1 - floatExample2 == 1.05;
System.out.println("float类型计算结果为: " + (floatExample1 - floatExample2));
System.out.println("float类型计算结果精度是否准确: " + floatResult);
}
}
输出结果如下:
0.30000000000000004
0.19999999999999996
501.49999999999994
1.2329999999999999
double类型计算结果精度是否准确: false
double类型计算结果为: 1.0499999999999998
float类型计算结果为: 1.0500001
float类型计算结果精度是否准确: false
可以看到,输出结果和我们预期的很不一样。是什么原因导致产生该问题呢