Double vs Float - Java

问题描述:

那么我有以下程序。这是我的老师给的乐趣。我对结果感到惊讶。Double vs Float - Java

代码:

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不相等?而实际上Math.abs()这样做是否使两者相同?

+0

@Pooya它不重复......请阅读我的问题,它是多样的。 –

+0

我不知道我的问题为什么被低估。请告诉我为什么它被低估了。 –

我在终端跑了这一点,那么添加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 

尝试使用打印语句上的变量,当你不理解的结果,这是了解这个东西,一个伟大的方式!

这里是打印语句我加供大家参考:

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

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