2015-07-01 31 views
0

我正在执行浮点值比较..以及在下面的程序中。这是一个非常基本的..在比较过程中有小数点的一些技巧。 请帮我理解这一点。比较在java中给出意外结果的浮点值

class C 
{ 
    public static void main(String args[]) 
    { 
     Float pi = new Float(3.13999999f); 
     if (pi > 3.13999999) { 
      System.out.print("pi is bigger than 3. "); 
     } 
     else if (pi < 3.13999999){ 
      System.out.print("pi is less than 3. "); 
     } 
    } 
} 

结果:pi是大于3

然后,我已经从所有三个值

class C 
{ 
    public static void main(String args[]) 
    { 
     Float pi = new Float(3.1399999f); 

     if (pi > 3.1399999) { 
      System.out.print("pi is bigger than 3. "); 
     } 
     else if (pi < 3.1399999){ 
      System.out.print("pi is less than 3. "); 
     } 
    } 
} 

现在的结果是最后一个数字(9)中除去:圆周率小于3

回答

2

当然,结果是意想不到的。你不应该/不能做精确的浮点比较。

通常,如果你想比较两个浮点值(A和B),你可以做差异A-B,并将它与可接受的错误(比如0.00001)进行比较。

另一种方法是使用Float.compareTo(Float)方法。

Float pi = new Float(3.139999f); 
    int result = pi.compareTo(new Float(3.139999f)); 

    if (result == 0) { 
     System.out.println("they are equal"); 
    } else { 
     System.out.println("something went wrong"); 
    } 

输出:

they are equal 
+1

值得注意的原因。在java中,float是一个单精度64位IEEE 754浮点。这并不意味着要保留精确的小数值,所以总会有误差。 如果您需要确切的数字或托管的精度,您应该使用BigDecimal。 – lscoughlin