2011-05-22 64 views
1

可能重複:
Java floating point arithmetic舍入誤差逼近

大家好, 我只是讀一本書,我遇到了這個例子給了不同的輸出。有人可以向我解釋爲什麼。

public class Test { 

    public static void main(String[] args) { 
     double x = 0.3 - 0.2; 
     double y = 0.2 - 0.1; 
     System.out.println(x); 
     System.out.println(y); 

     System.out.println(y == x); 
    } 
} 

輸出是: 0.09999999999999998

0.1

+1

查看http://www.ecs.umass.edu/ece/koren/arith/simulator/FPAdd/,瞭解如何使用IEEE 754標準執行計算(dec/sub/double並單擊compute)。如果您需要精確值(但速度較慢),請使用BigDecimal類。 – 2011-05-22 12:48:07

+0

Thx。這正是我真正想要的。 – Abhishek 2011-05-22 12:53:32

回答

0

計算機代表浮點數爲整數倍的2功率。 0.1不能完全表示爲一個浮點數(同樣你不能用十進制編碼1/3),因此你得到舍入誤差。避免這種情況的最好方法是在可以的情況下使用整數類型,而在不能時使用寬容比較功能。 除非您知道自己在做什麼,否則請勿比較浮點數以確保相等

0

該示例演示了計算機中的浮點運算不精確。變量值實際上取決於變量中存儲的數字。有些人的錯誤更少一些,但無論哪種方式,你都不能假定數值規則中的數值是準確的。