Double vs Float-Java

Double vs Float-Java,java,double,Java,Double,我有以下节目。这是我的老师为了好玩而给我的。我对结果感到惊讶 代码: public class Testing { public static void main(String[] args) { float piF = 3.141592653589793f; // value assigned has float precision double piD = 3.141592653589793; // value as

我有以下节目。这是我的老师为了好玩而给我的。我对结果感到惊讶

代码:

public class Testing {

    public static void main(String[] args) {

         float     piF =  3.141592653589793f;   // value assigned has float precision
         double    piD =  3.141592653589793;   //  value assigned has double precision
         final double THRESHOLD = .0001; 
         if( piF == piD) 
            System.out.println( "piF and piD are equal" ); 
         else 
            System.out.println( "piF and piD are not equal" ); 
         if( Math.abs( piF - (float) piD ) < THRESHOLD ) 
            System.out.println( "piF and piD are considered equal" ); 
         else 
            System.out.println( "piF and piD are not equal" ); 

    }

}
piF and piD are not equal
piF and piD are considered equal

那么为什么piF和piD不相等呢?而实际上是什么使得两者相同呢?

我在终端中运行了这个,然后为piF和piD的值添加了打印语句,结果如下:

piF and piD are not equal
piF and piD are considered equal
piF = 3.1415927
piD = 3.141592653589793
当你直接比较两者时,它们并不相等。但当您将piD强制转换为浮点类型时,它会变成:

(float) piD = 3.1415927
当您不了解结果时,尝试在变量上使用print语句,这是了解这些内容的好方法

以下是我添加的打印声明供您参考:

    System.out.println("piF = " + piF);
    System.out.println("piD = " + piD);

    System.out.println("(float) piD = " + (float) piD);

@普亚,它不是复制品。。。请阅读我的问题,它是多样的。我不知道为什么我的问题被否决了。请告诉我为什么它被否决了。