Development · 2013/07/30

Float/Double的一些新手陷阱

  1. Float和Double混用:

    比如下面的代码:要么都转化为float(2.8f),要么都转换为double:

        float f1 = 2.8f;

        if(f1 == 2.8){

            //do something

        }

  1. Float或者Double的计算:

    比如下面的代码:应该转换为long/int进行计算,根据小数点的位数决定乘以多大的数;

        double d1 = 2.8;

        double d2 = 1.8;

        if((d1-d2) == 1){

            //do something;

        }

比如:

        double d1 = 2.8;

        double d2 = 1.8;

        if((Math.round(d1*100)-Math.round(d2*100)) == (1*100)){

            //do something

        }

  1. 比较的精度问题:

    比如下面的代码:超出范围后,比较是错误的;用BigDecimal可以增加精度;

        double d1 = 2.8000000000000001;

        double d2 = 2.8000000000000002;

        if(d2>d1){

            //do something

        }

修改如下:

        BigDecimal bd1 = new BigDecimal(“2.800000000000000001”);

        BigDecimal bd2 = new BigDecimal(“2.800000000000000002”);        

        if(bd1.compareTo(bd2) == -1){

            //do something

        }