java中BigDecimal類型比較大小和絕對值計算方式
BigDecimal類型比較大小和絕對值計算
涉及到BigDecimal類型的比較,最好使用compareTo()
方法,不要用equals()
方法(除非對精度有要求)。
關(guān)鍵方法
修飾符 | 方法 | 描述 |
---|---|---|
BigDecimal | compareTo(BigDecimal val) | 將此 BigDecimal與指定的BigDecimal進行 比較,小于返回-1,等于返回0,大于返回1 |
代碼測試
import java.math.BigDecimal; //臨時測試類 public class CalculateTest { private static BigDecimal X=new BigDecimal("0.4"); private static BigDecimal Y=new BigDecimal("0.5"); private static BigDecimal Z=new BigDecimal("0.6"); private static BigDecimal T=new BigDecimal("0.4"); public static void main(String[] args) { System.out.println(X.compareTo(Y)); System.out.println(Y.compareTo(X)); System.out.println(X.compareTo(T)); if(X.compareTo(Y)==-1){ //小于 System.out.println(X+"小于"+Y); } if(Y.compareTo(X)==1){ //大于 System.out.println(Y+"大于"+X); } if(X.compareTo(T)==0){ //等于 System.out.println(X+"等于"+T); } if(Z.compareTo(Y)>-1){//大于等于 System.out.println(Z+"大于等于"+Y); } if(X.compareTo(Y)<1){//小于等于 System.out.println(X+"小于等于"+Y); } //BigDecimal絕對值計算 System.out.println(X.subtract(Y).abs()); } }
運行結(jié)果:
-1
1
0
0.4小于0.5
0.5大于0.4
0.4等于0.4
0.6大于等于0.5
0.4小于等于0.5
0.1
將equals()方法和compareTo()作比較
BigDecimal a=new BigDecimal("0.1"); BigDecimal b=new BigDecimal("0.100"); System.out.println(a.equals(b)); System.out.println(a.compareTo(b));
運行結(jié)果:
false
0
我們發(fā)現(xiàn)兩個的數(shù)值是一樣的,只是精度不同,equals方法判斷不相等,但是compareTo方法判斷結(jié)果為相等,所以equals方法會考慮精度,但compareTo方法不會。
常用的BigDecimal的定義和用法
最近涉及到浮點數(shù)金額的一個運算,為了不失精度,想到了之前刷題用過的BigDecimal,也借此對它進行一個簡單的復(fù)習(xí)。
Java在java.math包中提供的API類BigDecimal對超過16位有效位的數(shù)進行精確的運算。雙精度浮點型變量double可以處理16位有效數(shù)。
在實際應(yīng)用中,需要對更大或者更小的數(shù)進行運算和處理。float和double只能用來做科學(xué)計算或者是工程計算,在商業(yè)計算中用java.math.BigDecimal更為精準(zhǔn)。
BigDecimal創(chuàng)建的是對象,我們不能使用傳統(tǒng)的 +、-、*、/ 等算術(shù)運算符直接對其對象進行數(shù)學(xué)運算,而必須調(diào)用其相對應(yīng)的方法。方法中的參數(shù)也必須是BigDecimal的對象。
BigDecimal在計算中體現(xiàn)出來的精準(zhǔn)度
BigDecimal的用法:
1.BigDecimal有4個構(gòu)造方法
- BigDecimal(int) 創(chuàng)建一個具有參數(shù)所指定整數(shù)值的對象。
- BigDecimal(double) 創(chuàng)建一個具有參數(shù)所指定雙精度值的對象。(不建議采用)
- BigDecimal(long) 創(chuàng)建一個具有參數(shù)所指定長整數(shù)值的對象。
- BigDecimal(String) 創(chuàng)建一個具有參數(shù)所指定以字符串表示的數(shù)值的對象(優(yōu)先級最高)
2.BigDecimal常用的加減乘除運算
public BigDecimal add(BigDecimal value);??//加法 public BigDecimal subtract(BigDecimal value);??//減法 public BigDecimal multiply(BigDecimal value);??//乘法 public BigDecimal divide(BigDecimal value);?//除法
3.BigDecimal常用的比較大小方法
(int compareTo(Object o)):
BigDecimal的equals方法當(dāng)精度不一樣的時候也當(dāng)做不相等,而compareTo方法卻可以忽略精度的不同,只比較數(shù)值是否相同。
BigDecimal的compareTo()方法進行的是值比較,返回值為-1,0,1:
- num1<num2, 返回-1
- num1=num2,返回0
- num1>num2, 返回1
4.在java中判斷一個BigDecimal的值和0比較
int i=num.compareTo(BigDecimal.ZERO);
根據(jù) i 的值是 -1 or 0 or 1,即可判斷 小于 or 等于 or 大于關(guān)系
boolean flag = num.equals(BigDecimal.ZERO)
直接根據(jù) flag 的 true、false 進行判斷
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java中BufferedReader類獲取輸入輸入字符串實例
這篇文章主要介紹了Java中BufferedReader類獲取輸入輸入字符串實例,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下2018-02-02SpringCloud Feign轉(zhuǎn)發(fā)請求頭(防止session失效)的解決方案
這篇文章主要介紹了SpringCloud Feign轉(zhuǎn)發(fā)請求頭(防止session失效)的解決方案,本文給大家分享兩種解決方案供大家參考,感興趣的朋友跟隨小編一起看看吧2020-10-10解決Mybatis返回update后影響的行數(shù)問題
這篇文章主要介紹了解決Mybatis返回update后影響的行數(shù)問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11java分析html算法(java網(wǎng)頁蜘蛛算法示例)
近來有些朋友在做蜘蛛算法,或者在網(wǎng)頁上面做深度的數(shù)據(jù)挖掘,下面使用示例2014-03-03Spring Boot Mail QQ企業(yè)郵箱無法連接解決方案
這篇文章主要介紹了Spring Boot Mail QQ企業(yè)郵箱無法連接解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-09-09java 利用反射獲取內(nèi)部類靜態(tài)成員變量的值操作
這篇文章主要介紹了java 利用反射獲取內(nèi)部類靜態(tài)成員變量的值操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12