为什么0.1+0.2=0.30000000000000004?怎么解决这个问题?
在我们平时写代码的时候,可能会出现和我们的认知不符的情况。比如在我们的认知里0.1+0.2=0.3,但代码运行的结果却是0.30000000000000004。float类型和double类型的数在运算时 有可能会有误差,也有可能不会出现误差。代码示例如下:
public class Demo {
public static void main(String[] args) {
double a=0.1;
double b=0.2;
System.out.println(a+b);
System.out.println(a-b);
System.out.println(a*b);
System.out.println(a/b);
}
}
运行结果:
0.30000000000000004
-0.1
0.020000000000000004
0.5
解决这种误差的方法就是使用BigDecimal类,它能够进行精确的计算。它的常见方法有:
(1)public BigDecimal add(BigDecimal arg0);加法运算
(2)public BigDecimal subtract(BigDecimal arg0);减法运算
(3)public BigDecimal multiply(BigDecimal arg0);乘法运算
(4)public BigDecimal divide(BigDecimal arg0);除法运算
BigDecimal类使用的代码示例如下:
import java.math.BigDecimal;
public class Demo {
public static void main(String[] args) {
//创建两个对象
BigDecimal b1=new BigDecimal("0.1");
BigDecimal b2=new BigDecimal("0.2");
//可以定义一个变量用于接收运算结果
BigDecimal result=b1.add(b2);//加法
System.out.println(result);
//不定义变量,直接输出结果
System.out.println(b1.subtract(b2));//减法
System.out.println(b1.multiply(b2));//乘法
System.out.println(b1.divide(b2));//除法
}
}
运行结果:
0.3
-0.1
0.02
0.5