double转BigDecimal精度丢失
程序员文章站
2022-03-24 08:30:28
...
很多人在double或float转BigDecimal时习惯使用BigDecimal的构造方法new BigDecimal(33.33)
,此种写法会存在精度丢失问题,下面就具体实例带大家体会:
一、使用BigDecimal的构造方法
// 使用BigDecimal的构造方法
double d = 33.33;
BigDecimal bigDecimal = new BigDecimal(d);
System.out.println(bigDecimal);
结果:33.33精度已经丢失
做减法后:
double d = 33.33;
BigDecimal bigDecimal = new BigDecimal(d);
System.out.println(bigDecimal);
// 做减法(减去33.33)
BigDecimal subtract = bigDecimal.subtract(new BigDecimal(33.33));
System.out.println(subtract);
结果:33.33-33.33在精度丢失的情况下做减法,结果不等于0
二、使用BigDecimal.valueOf()
// 使用BigDecimal.valueOf()
double d = 33.33;
BigDecimal bigDecimal = BigDecimal.valueOf(d);
System.out.println(d);
BigDecimal subtract = bigDecimal.subtract(BigDecimal.valueOf(33.33));
System.out.println(subtract);
结果:精度没有丢失,计算正确
上一篇: 多线程synchronized关键字与局部变量,全局变量,静态变量
下一篇: 浮点类型精度丢失