Java基本类型计算不准时,防坑妙招——使用BigDecimal
关于Java基本精确计算,你被Java基本类型坑的那些事
在接入支付的时候,我们时常要计算出总价,这里涉及到加减乘除的一些计算:
以前的做法是使用基本类型直接计算,那么你会出现以下的问题:
double d1 = 100.0234;
double d2 = 12.0652;
System.out.println(d1 - d2)
上面的代码的结果会出乎你所料
计算的结果不是:87.9582
而是一个有很多位数的小数:87.95819999999999
上面的结果显然不是我们想要的结果,那么解决方法是什么呢?,请使用BigDecimal类来进行高精度的运算,请看一下的代码:
double d1 = 100.0234;
double d2 = 12.0652;
BigDecimal b1 = new BigDecimal(Double.toString(d1));
BigDecimal b2 = new BigDecimal(Double.toString(d2));
System.out.println(b1.subtract(b2).doubleValue());
如果是上面的代码,那么你就会得到你想要的结果:87.9582
总结
由于浮点数在计算机中表示的是近似值,所以直接使用浮点数进行计算的时候会出现精度缺失的问题。这个时候为了避免精度缺失,我们必须使用支持精确计算的工具,Java中的工具就是 BigDecimal 类