BigDecimal等值比較該用什么方法

1. 用 “==”比較

  • 代碼示例
  BigDecimal bigDecimal1 = BigDecimal.valueOf(0.00);
  BigDecimal bigDecimal2 = BigDecimal.valueOf(0.00);
  System.out.println(bigDecimal1 == bigDecimal2);
  • 比較結(jié)果
false
  • 原因
    因為BigDecimal是對象,所以不能用==來判斷兩個數(shù)字的值是否相等。

2. 用 “equals”比較

  • 代碼示例1
BigDecimal bigDecimal1 = BigDecimal.valueOf(0.00);
BigDecimal bigDecimal2 = BigDecimal.valueOf(0.00);
System.out.println(bigDecimal1.equals(bigDecimal2));
  • 比較結(jié)果
true
  • 代碼示例2
BigDecimal bigDecimal1 = BigDecimal.valueOf(0);
BigDecimal bigDecimal2 = BigDecimal.valueOf(0.0);
System.out.println(bigDecimal1.equals(bigDecimal2));
  • 比較結(jié)果
false
  • 原因
    equals方法會比較兩部分內(nèi)容,分別是值(value)和精度(scale),源碼如下
    image.png

3. 用 “compareTo”比較

  • 代碼示例1
BigDecimal bigDecimal1 = BigDecimal.valueOf(0);
BigDecimal bigDecimal2 = BigDecimal.valueOf(0.0);
System.out.println(bigDecimal1.compareTo(bigDecimal2));
  • 比較結(jié)果
0
  • 原因
    BigDecimal中提供了compareTo方法,這個方法就可以只比較兩個數(shù)字的值,如果兩個數(shù)相等,則返回0,源碼如下。
    image.png

總結(jié)

BigDecimal是一個非常好用的表示高精度數(shù)字的類,其中提供了很多豐富的方法。但是,他的equals方法使用的時候需要謹(jǐn)慎,因為他在比較的時候,不僅比較兩個數(shù)字的值,還會比較他們的精度,只要這兩個因素有一個是不相等的,那么結(jié)果也是false、如果讀者想要對兩個BigDecimal的數(shù)值進行比較的話,可以使用compareTo方法。

參考文檔:BigDecimal不能使用equals 做等值比較

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容