天天看點

Bigdecimal類型判斷是否等于0(用equals方法的坑)

1.我之前用來判斷Bigdecimal類型是否等于0的方法

b.equals(BigDecimal.ZERO);

用equals方法和BigDecimal.ZERO進行比較。

2.上面方法存在的問題

有一天,調用這個兩個數字減過之後為零,然後和零用這句代碼的時候,傳入的确實是0,但卻傳回false

檢視源代碼發現:

Bigdecimal類型判斷是否等于0(用equals方法的坑)

decimal的equals方法不僅僅比較值的大小是否相等,首先比較的是scale(scale是bigdecimal的保留小數點位數,比如 new Bigdecimal("1.001"),scale為3),也就是說,不但值得大小要相等,保留位數也要相等,equals才能傳回true。

Bigdecimal b = new Bigdecimal("0") 和 Bigdecimal c = new Bigdecimal("0.0"),用equals比較,傳回就是false。

Bigdecimal.ZERO的scale為0。

是以,用equals方法要注意這一點。

3.用b.compareTo(BigDecimal.ZERO)==0,可以比較是否等于0,傳回true則等于0,傳回false,則不等于0

繼續閱讀