2014-09-10 39 views
-2
float a = (float) 3.32 ; 
    float b = (float) 4.32 ; 
    System.out.println(b%a); 

輸出爲1.0000002Java的浮點模誤差

爲什麼?

+5

浮點類型是根據其性質不準確的。這樣的小錯誤是不可避免的。 – Bohemian 2014-09-10 09:22:54

+0

http://en.wikipedia.org/wiki/Floating_point – user1516873 2014-09-10 09:23:06

+0

請參閱[每個程序員應該瞭解的浮點數](http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html )和http://floating-point-gui.de/basic/ – 2014-09-10 09:28:09

回答

2

首先如何聲明浮點值作爲變量?

float val=3.23f; 

關於您的結果。 這是float的典型性質。

如何得到正確答案?嘗試這種方式

BigDecimal a = new BigDecimal("3.32") ; 
BigDecimal b = new BigDecimal("4.32") ; 
System.out.println(b.divideAndRemainder(a)[1]); // 1st element is remainder 

輸出地說:

1 

您可能需要閱讀有關divideAndRemainder()

+1

@downvoter,無法看到您的評論。 – 2014-09-10 09:29:11

+0

我已投稿風水:) – 2014-09-10 09:33:49