大家好,又见面了,我是你们的朋友全栈君。
很多人在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);
结果:精度没有丢失,计算正确
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/136048.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...