问题:
double a=1.3;
double b=2.3;
double c= b-a;
double d= 1;
if(c<d){
System.out.println("10086");
}else {
System.out.println("10010");
}
}
输入结果:
为什么输入的是true呢?
debug后:
发现c不是我们认为的1.0而是0.99999999999999998,所以输出的是true。
原因:
double类型的双精度小数部分能精确到小数点后的15位,用64位二进制进行描述,进行运算时也在转换成二进制进行运算,但是在转换成二进制代码运算的时候,存储小数部分的位数会有不够的现象,即无限循环小数。
解决方法:
用Decimal就不会出现上面的问题了
BigDecimal num1 = new BigDecimal("2.3");
BigDecimal num2 = new BigDecimal("1.3");
//减法
BigDecimal result2 = num1.subtract(num2);
System.out.println(result2);
}
输出结果: