【Java】浮点数使用的陷阱:2.7和8.1/3(浮点数之间怎么判等)

Java中涉及浮点数的运算时,要小心。因为计算机对浮点数的运算,是有一定精度损失的(例如演示程序中的num2和num3)。

尤其是涉及到“浮点数之间进行判等操作”时,更要小心,可以分为2种场景:

  1. 如果比较的一方是含有浮点数的运算结果(演示程序中的num2或num3),此时采用的方法是:取两个浮点数差值的绝对值,只要小于一个很小的浮点数,此时就认为两个浮点数是相等的
    至于“一个很小的浮点数”的大小怎么确定,要结合具体的业务场景,看其允许的精度是多少。
  2. 如果比较的两个浮点数(演示程序中的num1和num4)都是“直接用浮点常量直接赋值”或“直接查询得到的”,则此时可以直接进行判等操作的。

程序示例:

public class floatdouble{

    public static void main(String[] args){

        double num1 = 2.7;
        double num2 = 8.1 / 3;
        double num3 = 8.1 / 3.0;

        double num4 = 2.7;

        double num5 = 2.8;

        System.out.println(num1);//2.7
        System.out.println(num2);//2.6999999999999997
        System.out.println(num3);//2.6999999999999997

        if(num1 == num2){
        	System.out.println("相等1");//此if条件不会成立
        }

        if(Math.abs(num1 - num2) < 0.00000000001){
        	System.out.println("相等2");//此if条件成立
        }

        if(num1 == num4){
        	System.out.println("相等3");//此if条件会成立
        }

        if(num1 < num5){
        	System.out.println("num1 小于 num5");//此if条件会成立
        }
    }
}

运行结果:
在这里插入图片描述


版权声明:本文为cw616729原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。