BigDecimal 使用筆記

一.bigdecimal 基本算法

????加,減,乘,除,BigDecimal類提供了相應(yīng)的成員方法。

????1 public BigDecimal add(BigDecimal value);? ? ? ? ? ? ? ? ? ? ? ? //加法

????2 public BigDecimal subtract(BigDecimal value);? ? ? ? ? ? ? ? ? //減法

????3 public BigDecimal multiply(BigDecimal value);? ? ? ? ? ? ? ? ? //乘法

????4 public BigDecimal divide(BigDecimal value);? ? ? ? ? ? ? ? ? ? //除法

????5 toString() ? ? ? ? ? ? ? //?將BigDecimal對象的數(shù)值轉(zhuǎn)換成字符串。

????6 doubleValue() ? ? ? ? ?//將BigDecimal對象中的值以雙精度數(shù)返回。

????7 floatValue() ? ? ? ? ? ? //將BigDecimal對象中的值以單精度數(shù)返回。

????8 longValue() ? ? ? ? ? ? //將BigDecimal對象中的值以長整數(shù)返回。

????9 intValue() ? ? ? ? ? ? ? // 將BigDecimal對象中的值以整數(shù)返回。

二.bigdecimal 復(fù)雜算法

????1.BigDecimal類型的可以轉(zhuǎn)換到double類型:

????????用變量.doubleValue();函數(shù)? 即可將 BigDecimal 類型數(shù)據(jù) 轉(zhuǎn)化為 double類型!

????2.BigDecimal比較大小?:

????????可以通過BigDecimal的compareTo方法來進(jìn)行比較。

????????BigDecimal1.compareTo(BigDecimal2)

????????返回的結(jié)果是int類型,-1表示小于,0是等于,1是大于。

????3.BigDecimal取其中最大、最小值、絕對值、相反數(shù)、指數(shù)冪:

????????a.max (b) //比較取最大值

????????a.min(b) //比較取最小值

????????a.abs()//取最絕對值

????????a.negate()//取相反數(shù)

????????a.pow(b) // a^b指數(shù)冪

三.bigdecimal 保留小數(shù)位,精度計(jì)算

????BigDecimal.setScale()方法用于格式化小數(shù)點(diǎn)

????setScale(1)表示保留一位小數(shù),默認(rèn)用四舍五入方式

????setScale(1,BigDecimal.ROUND_DOWN)直接刪除多余的小數(shù)位,如2.35會變成2.3

????setScale(1,BigDecimal.ROUND_UP)進(jìn)位處理,2.35變成2.4

????setScale(1,BigDecimal.ROUND_HALF_UP)四舍五入,2.35變成2.4

? ? setScaler(1,BigDecimal.ROUND_HALF_DOWN)四舍五入,2.35變成2.3,如果是5則向下舍

注釋:

????1:scale指的是你小數(shù)點(diǎn)后的位數(shù)。

????????比如123.456則score就是3.

????????score()就是BigDecimal類中的方法啊。

????????比如:BigDecimal b = new BigDecimal("123.456");

????????b.scale(),返回的就是3.

????2:roundingMode是小數(shù)的保留模式。

????????它們都是BigDecimal中的常量字段,有很多種。

????????比如:BigDecimal.ROUND_HALF_UP表示的就是4舍5入。

????3:pubilc BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)

????????意思是說:我用一個(gè)BigDecimal對象除以divisor后的結(jié)果,并且要求這個(gè)結(jié)果保留有scale個(gè)小數(shù)位,roundingMode表示

????????的就是保留模式是什么,是四舍五入啊還是其它的,你可以自己選!

????4:對于一般add、subtract、multiply方法的小數(shù)位格式化如下:

????????BigDecimal mData = new BigDecimal("9.655").setScale(2, BigDecimal.ROUND_HALF_UP);

????????System.out.println("mData=" + mData);

????????----結(jié)果:mData=9.66

????5:銀行家算法

????????NumberFormat numberFormat = new DecimalFormat("#0.##");

????????return numberFormat.format(num.doubleValue());

參考:

????????http://www.yiibai.com/java/math/bigdecimal_bytevalueexact.html

????????http://blog.csdn.net/u010264560/article/details/52872986

????????http://zhangyinhu8680.iteye.com/blog/1536397

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容