Java double類型比較大小詳解
Java double類型比較大小
一、問(wèn)題描述
把從數(shù)據(jù)庫(kù)里查詢出來(lái)的數(shù)據(jù),金額小于1的數(shù)據(jù)給過(guò)濾掉,數(shù)據(jù)庫(kù)里的數(shù)據(jù)有很多都是0.01,0.02,等。
二、解決方法
先把他們轉(zhuǎn)成BigDecimal類型,然后在利用BigDecimal中的compareTo方法去比較大小,實(shí)現(xiàn)如下:
@org.junit.Test
public void Test(){
BigDecimal big = new BigDecimal(1);
BigDecimal Graphicprice = new BigDecimal(0.01);//圖文價(jià)格
BigDecimal Speechprice = new BigDecimal(0.02);//語(yǔ)音價(jià)格
BigDecimal Videoprice = new BigDecimal(1);//視頻價(jià)格
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");
}
}
輸出結(jié)果如下:

@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("第二位數(shù)大!");
}
if (data1.compareTo(data2) == 0) {
System.out.println("兩位數(shù)一樣大!");
}
if (data1.compareTo(data2) > 0) {
System.out.println("第一位數(shù)大!");
}
}
關(guān)于兩個(gè)double類型數(shù)的大小判斷
大于小于是可以像整數(shù)那樣直接判斷的,但是不可以判斷兩個(gè)double是相等的。
因?yàn)?/strong>
double類型的表示往往是不精確的(近似表示). 有精度范圍的那種. 如果是運(yùn)算結(jié)果,即使都是0.0,也不保證相等!一般用一個(gè)容差e(很小的值)
那么a和b相等就可以表示為
if ( fabs(a-b) < e ) return true;
注意:double類型雖然可以通過(guò)>和<直接比較,但是大于等于,小于等于是不能直接>=和<=比較的。
錯(cuò)誤比較方式:now >= mid*n
正確比較方式:now - mid * n > -0.000001
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java多線程高并發(fā)中解決ArrayList與HashSet和HashMap不安全的方案
ArrayList實(shí)現(xiàn)了可變大小的數(shù)組。它允許所有元素,包括null。ArrayList沒(méi)有同步,HashMap和Hashtable類似,不同之處在于HashMap是非同步的,并且允許null,關(guān)于HashSet有一件事應(yīng)該牢記,即就條目數(shù)和容量之和來(lái)講,迭代是線性的,接下來(lái)讓我們?cè)敿?xì)來(lái)了解吧2021-11-11
關(guān)于服務(wù)網(wǎng)關(guān)Spring Cloud Zuul(Finchley版本)
這篇文章主要介紹了關(guān)于服務(wù)網(wǎng)關(guān)Spring Cloud Zuul(Finchley版本),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03

