BigDecimal初始化问题
最近使用BigDecimal在订单金额结算时出现的精度问题,查询资料才发现原因
代码如下
BigDecimal b1=new BigDecimal(52.165);
BigDecimal b2=BigDecimal.valueOf(52.165);
System.out.println(b1+"==="+b2);
输出结果如下
52.16499999999999914734871708787977695465087890625===52.165
查询资料发现BigDecimal.valueOf(double) 初始化数据是把Double.toString(double)方法提供的规范的字符串表示形式将double转换为BigDecimal
而new BigDecimal(double)中是将 double 转换为 BigDecimal,后者是 double 的二进制浮点值准确的十进制表示形式,也就是说使用new方式的初始化会出现精度缺失
而使用valueOf()方式初始化就不会出现精度缺失
网友评论