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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值