2011-05-20 92 views
3

我运行下面的代码,但没想到结果..意外小数结果

public class SampleDemo { 
    public static void main(String args[]) { 
     System.out.println(10.00 - 9.10); 
    } 
} 

我得到O/P为0.9000000000000004

为什么会这样呢?

+1

阅读侧面有所有这些相关的问题 - - > http://stackoverflow.com/questions/5076710/what-is-float -in-java – 2011-05-20 17:17:38

+5

[欢迎使用浮点运算。](http://programmers.stackexchange.com/questions/62948/what-c​​an-be-done-to-programming-languages-to-avoid-floating-point-陷阱):) – 2011-05-20 17:18:56

回答

6

这是因为十进制值不能完全由float或double表示。

一个建议:避免浮动和双精度需要确切的答案。使用的BigDecimal,int或长,而不是


使用INT:

public class SampleDemo { 
    public static void main(String args[]) { 
     System.out.println(10 - 9); 
    } 
} 

// Output : 1 

使用的BigDecimal:

import java.math.BigDecimal; 

public class SampleDemo { 
    public static void main(String args[]) { 
    System.out.println(new BigDecimal("10.00").subtract(new BigDecimal("9.10"))); 
          } 
        } 
// Output : 0.90 
+4

只需指出,如果您需要这种精度,请参阅[BigDecimal](http://download.oracle.com/javase/6/docs/api/java/math/BigDecimal.html) ,它可以让你更精确地控制精确度,规模,四舍五入政治等。 – 2011-05-20 17:18:33

+0

是的,@Anthony +1我将它添加到我的答案中。 :) – 2011-05-20 17:21:00