Java double類型比較大小詳解
Java double類型比較大小
一、問題描述
把從數據庫裡查詢出來的數據,金額小於1的數據給過濾掉,數據庫裡的數據有很多都是0.01,0.02,等。
二、解決方法
先把他們轉成BigDecimal類型,然後在利用BigDecimal中的compareTo方法去比較大小,實現如下:
@org.junit.Test public void Test(){ BigDecimal big = new BigDecimal(1); BigDecimal Graphicprice = new BigDecimal(0.01);//圖文價格 BigDecimal Speechprice = new BigDecimal(0.02);//語音價格 BigDecimal Videoprice = new BigDecimal(1);//視頻價格 System.out.println(Graphicprice + " " + Speechprice +" " + Videoprice); if(Graphicprice.compareTo(big)<0 || Graphicprice.compareTo(big)==0 || Speechprice.compareTo(big)<0 || Speechprice.compareTo(big)==0 || Videoprice.compareTo(big)<0 || Videoprice.compareTo(big)==0){ System.out.println("ok"); } }
輸出結果如下:
@org.junit.Test public void Test(){ BigDecimal data1 = new BigDecimal("1"); BigDecimal data2 = new BigDecimal("0.01"); if (data1.compareTo(data2) < 0) { System.out.println("第二位數大!"); } if (data1.compareTo(data2) == 0) { System.out.println("兩位數一樣大!"); } if (data1.compareTo(data2) > 0) { System.out.println("第一位數大!"); } }
關於兩個double類型數的大小判斷
大於小於是可以像整數那樣直接判斷的,但是不可以判斷兩個double是相等的。
因為
double類型的表示往往是不精確的(近似表示). 有精度范圍的那種. 如果是運算結果,即使都是0.0,也不保證相等!一般用一個容差e(很小的值)
那麼a和b相等就可以表示為
if ( fabs(a-b) < e ) return true;
註意:double類型雖然可以通過>和<直接比較,但是大於等於,小於等於是不能直接>=和<=比較的。
錯誤比較方式:now >= mid*n
正確比較方式:now – mid * n > -0.000001
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- java開發使用BigDecimal避坑四則
- Java BigDecimal類用法詳解
- 聊聊Java Double相加出現的怪事
- Java中求Logn/log2 的精度問題
- Java學習筆記:關於Java double類型相加問題