在java中
double b=0.0002;
double b2=0.0001;
System.out.println(b+b2);
会出现什么?0.0003?不不不,会出现3.0000000000000003E-4
这是因为计算机是通过二进制操作的,10进制转换成2进制的时候小数位精度会丢失,会出现无限小数,
类似于10进制的 1/3 会出现0.333333333333333.................
所以要求精准的话会用 BigDecimal 数据包装类操作数据
BigDecimal d1=new BigDecimal("10");
注意这个构造函数要用string,如果用double 0.0003,还是会出现无限小数这不是因为BigDecimal 而是因为double 0.0003本身就是会出现精度问题。