暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

记录:Double转BigDecimal

维的爪哇 2020-06-04
984

当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的toString
BigDecimal recommend2 = BigDecimal.valueOf(0.1);

方案有很多种,这只是我现在着手使用的方法,记录备案。

公众号回复:"开发手册"即可领取全套电子版阿里巴巴Java开发手册

文章转载自维的爪哇,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论