一.bigdecimal 基本算法
????加,減,乘,除,BigDecimal類提供了相應的成員方法。
????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ù)值轉換成字符串。
????6 doubleValue() ? ? ? ? ?//將BigDecimal對象中的值以雙精度數(shù)返回。
????7 floatValue() ? ? ? ? ? ? //將BigDecimal對象中的值以單精度數(shù)返回。
????8 longValue() ? ? ? ? ? ? //將BigDecimal對象中的值以長整數(shù)返回。
????9 intValue() ? ? ? ? ? ? ? // 將BigDecimal對象中的值以整數(shù)返回。
二.bigdecimal 復雜算法
????1.BigDecimal類型的可以轉換到double類型:
????????用變量.doubleValue();函數(shù)? 即可將 BigDecimal 類型數(shù)據 轉化為 double類型!
????2.BigDecimal比較大小?:
????????可以通過BigDecimal的compareTo方法來進行比較。
????????BigDecimal1.compareTo(BigDecimal2)
????????返回的結果是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ù)位,精度計算
????BigDecimal.setScale()方法用于格式化小數(shù)點
????setScale(1)表示保留一位小數(shù),默認用四舍五入方式
????setScale(1,BigDecimal.ROUND_DOWN)直接刪除多余的小數(shù)位,如2.35會變成2.3
????setScale(1,BigDecimal.ROUND_UP)進位處理,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ù)點后的位數(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)
????????意思是說:我用一個BigDecimal對象除以divisor后的結果,并且要求這個結果保留有scale個小數(shù)位,roundingMode表示
????????的就是保留模式是什么,是四舍五入啊還是其它的,你可以自己選!
????4:對于一般add、subtract、multiply方法的小數(shù)位格式化如下:
????????BigDecimal mData = new BigDecimal("9.655").setScale(2, BigDecimal.ROUND_HALF_UP);
????????System.out.println("mData=" + mData);
????????----結果: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