当double需要转换为BigDecimal时,精度丢失或者数据异常,结果有误差,如何解决?
我需要做的是,前端页面传入的参数通过计算,在得出计算的总的数值,通过BigDecimal保留两位小数,并且第三位小数进行四舍五入得到最终的数值;
但是我发现结果有0.01的误差,例如本应是0.365,保留两位小数,第三位四舍五入,结果应该是0.37才对,但最后给到的结果却是0.36,直接保留两位小数,但是第三位没有进行四舍五入;
原因是在于new BigDecimal造成误差,在阿里巴巴Java开发手册上也有明确强制的规定:

直接将Double转化为BigDecimal存在精度损失风险,特别是在精确计算场景中,解决方案在此手册上也给出了两种方法:
优先推荐入参为String的构造方法,例
//在传入参数时候直接传入string类型BigDecimal recommend1 = new BigDecimal("0.1");
使用 BigDecimal 的 valueOf 方法
//此方法内部其实也是执行了double的toStringBigDecimal recommend2 = BigDecimal.valueOf(0.1);
方案有很多种,这只是我现在着手使用的方法,记录备案。
公众号回复:"开发手册"即可领取全套电子版阿里巴巴Java开发手册
文章转载自维的爪哇,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




