java 浮点类型加减有误

来源:互联网 发布:无线mesh网络 编辑:程序博客网 时间:2024/05/16 04:50

在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本身就是会出现精度问题。