double stc = 4107.560000000;
System.out.println(stc);
System.out.println(stc * 1000);
BigDecimal bigDecimal = new BigDecimal(“4107.560000000”);
System.out.println(bigDecimal.multiply(new BigDecimal(“1000”)));
BigDecimal bigDecimal1 = new BigDecimal(stc);
System.out.println(bigDecimal1.multiply(new BigDecimal(“1000”)));
BigDecimal bigDecimal2 = new BigDecimal(stc + “”);
System.out.println(bigDecimal2.multiply(new BigDecimal(“1000”)));
4107.56
4107560.0000000005
4107560.000000000
4107560.0000000004001776687800884246826171875000
4107560.00
由此可以看出
1.double没问题
2.double乘以1000就有问题。
3.bigDecimal是绝对安全的
4.用double直接转bigDecimal 会发生错误
5.将dobule 转成string 再转成bigDecimal不会发生错误
血的教训告诉我们,double精度太高,不稳定,虽然好用,数据稳定,也不安全,会偏差。尽量用bigDecimal,稳定,安全。