大家好,又见面了,我是你们的朋友全栈君。
很多人在double或float转BigDecimal时习惯使用BigDecimal的构造方法new BigDecimal(33.33)
,此种写法会存在精度丢失问题,下面就具体实例带大家体会:
// 使用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()
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);
结果:精度没有丢失,计算正确
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/136048.html原文链接:https://javaforall.cn