简单记录Float和Double转BigDecimal精度问题

2,546 阅读1分钟

@Test
public void test1(){
   Float f = 0.01F;
   Double d = 0.01D;
   System.out.println(f);//0.01
   System.out.println(d);//0.01
   BigDecimal bigDecimal1 = new BigDecimal(f);
   BigDecimal bigDecimal2 = new BigDecimal(Float.toString(f));
   BigDecimal bigDecimal3 = new BigDecimal(d);
   BigDecimal bigDecimal4 = new BigDecimal(Double.toString(d));
   System.out.println(bigDecimal1);//0.00999999977648258209228515625
   System.out.println(bigDecimal1.floatValue());//0.01
   System.out.println(bigDecimal2);//0.01
   System.out.println(bigDecimal3);//0.01000000000000000020816681711721685132943093776702880859375
   System.out.println(bigDecimal3.doubleValue());//0.01
   System.out.println(bigDecimal4);//0.01
}

float和double转bigdecimal不能直接转,会出现精度丢失问题,需要转成String字符串在转BigDecimal,精度问题就没了,不过floatValue和doubleValue貌似也能解决精度问题