Java.BigDecimal比較使用compareTo而非equals


BigDecimal是 java.math包下提供的一種用於精確運算的類型

用於表示數字。進行數字間的判斷。比較數字大小。

                   阿里巴巴開發手冊原文

 

試驗

 

 

 輸出結果

 

 

 

造成這種結果是因為精度問題!

BigDecimal中 equals源碼

 

 

 

bigDecimal0 和 bigDecimal1 傳的都是整數,不存在精度問題

bigDecimal2 和 bigDecimal3 傳的都是浮點數 double,

創建一個double類型0.1 其實不是正好的0.1 而是0.1000000000000000055511151231257827021181583404541015625,  double自身知識表示一個近似值

無論是0.1 還是0.10 本質都是0.1 精度都是55位  所以精度相同  

 

bigDecimal4 和 bigDecimal5 傳的都是字符串,

當我們使用new BigDecimal("0.1")創建一個BigDecimal 的時候,其實創建出來的值正好就是等於0.1的。那么他的精度也就是1。

 如果使用new BigDecimal("0.10000"),那么創建出來的數就是0.10000,精度也就是5。

因為BigDecimal("1.0")和BigDecimal("1.00")的精度不一樣,所以在使用equals方法比較的時候,得到的結果就是false。

 

 

BigDecimal中提供了compareTo方法,這個方法就可以只比較兩個數字的值,如果兩個數相等,則返回0。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM