前言
由于公司的一个需求,要求计算两个价格的差值,从第三方接口拿过来的数据存储的价钱都是Double类型,然后我计算的时候也打算用Double后来发现大佬说要用BigDecimal于是改用BigDecimal但是改了之后发现会出现计算不精准的情况。
正文
不多说上来贴代码
public static void main(String[] args) {
Map input = new HashMap();
double a = 5.01;
double b = 1.02;
input.put("a",a);
input.put("b",b);
BigDecimal Biga = new BigDecimal((Double) input.get("a"));
BigDecimal Bigb = new BigDecimal((Double) input.get("b"));
double result = Biga.subtract(Bigb).doubleValue();
System.out.println(result);
}
结果:3.9899999999999998
于是我马不停蹄的百度求助大佬找到了答案,原来是如果传double进去就会产生这种不精准的情况,但是换成string传入就不会出现这种情况。
public static void main(String[] args) {
Map input = new HashMap();
double a = 5.01;
double b = 1.02;
input.put("a",a);
input.put("b",b);
BigDecimal Biga = new BigDecimal(input.get("a").toString());
BigDecimal Bigb = new BigDecimal(input.get("b").toString());
double result = Biga.subtract(Bigb).doubleValue();
System.out.println(result);
}
}
结果:3.99
那些我踩过的坑,害。