java程序输出的说明

pra*_*tri 5 java boolean

我遇到了以下程序

class Boolean {  
  public static void main(String argv[]) {  
    boolean x;  
    x = 4.4f == 4.4;  
    System.out.println(x);  
  }  
} 
Run Code Online (Sandbox Code Playgroud)

以下程序的输出是 false

但是,如果我们以下列方式编写程序,那么

class Boolean {  
    public static void main(String argv[]) {  
      boolean x;  
      x = 4.5f == 4.5;  
      System.out.println(x);  
    }  
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下输出是 true

有人可以解释一下为什么吗?

Krn*_*rns 3

通常不应将浮点值与 == 运算符进行比较。您应该使用“足够接近”的比较,例如检查值是否存在某个小值的差异:

double epsilon = 0.000001

boolean equal = Math.abs(value1-value2) < epsilon

在您的示例中,4.4f不等于4.4,因为java默认浮点值为double类型,即64位,并且为了比较它们java将4.4f强制转换为double,这导致它与原始double值4.4略有不同(因为用二进制表示十进制分数存在问题)。

这是关于浮点数的一个很好的链接。