天天看點

java中BigDecimal的應用

我們來看一看java中bigdecimal的用法

public class mathutil {

// 加法

public static double add(double a,double b,int scal) throws exception{

    bigdecimal add1 = conversiontobigdecimal(a);

    bigdecimal add2 = conversiontobigdecimal(b);

    double result = add1.add(add2).setscale(scal,bigdecimal.round_half_up).doublevalue();

    return result;

}

// 減法

public static double subtract(double a,double b,int scal) throws exception{

    bigdecimal subtract1 = conversiontobigdecimal(a);

    bigdecimal subtract2 = conversiontobigdecimal(b);

    double result = subtract1.subtract(subtract2).setscale(scal,bigdecimal.round_half_up).doublevalue();

// 乘法

public static double multiply(double a,double b,int scal) throws exception{

    bigdecimal multiply1 = conversiontobigdecimal(a);

    bigdecimal multiply2 = conversiontobigdecimal(b);

    double result = multiply1.multiply(multiply2).setscale(scal,bigdecimal.round_half_up).doublevalue();

// 除法

public static double divide(double a,double b,int scal) throws exception{

    bigdecimal divide1 = conversiontobigdecimal(a);

    bigdecimal divide2 = conversiontobigdecimal(b);

    double result = divide1.divide(divide2,scal,bigdecimal.round_half_up).doublevalue();

// 類型轉換

public static bigdecimal conversiontobigdecimal(object obj) throws exception

{

  if (obj instanceof double)

  {

   return new bigdecimal(obj.tostring());

  }

  else if (obj instanceof float)

  else if (obj instanceof integer)

  else if (obj instanceof long)

  else if (obj instanceof byte)

  else if (obj instanceof short)

  else

   throw new exception("不能轉換");

下面我們來看看bigdecimal的setscale方法

bigdecimal.setscale()方法用于格式化小數點

表示保留一位小數,預設用四舍五入方式

setscale(1)

直接删除多餘的小數位,如2.35會變成2.3

setscale(1,bigdecimal.round_down)

進位處理,2.35變成2.4

setscale(1,bigdecimal.round_up)

四舍五入,2.35變成2.4

setscale(1,bigdecimal.round_half_up)

四舍五入,2.35變成2.3,如果是5則向下舍

setscaler(1,bigdecimal.round_half_down)

注意點一

scale指的是你小數點後的位數。scale()就是bigdecimal類中的方法。如

bigdecimal b = new bigdecimal("123.456");

b.scale(),傳回的就是3

注意點二

roundingmode是小數的保留模式。它們都是bigdecimal中的常量字段,有很多種,如

bigdecimal.round_half_up表示的就是4舍5入

注意點三

pubilc bigdecimal divide(bigdecimal divisor, int scale, int roundingmode)的意思是說:我用一個bigdecimal對象除以divisor後的結果,并且要求這個結果保留有scale個小數位,roundingmode表示的就是保留模式是什麼,是四舍五入啊還是其它的

注意點四

對于一般add、subtract、multiply方法的小數位格式化如下

bigdecimal mdata = new bigdecimal("9.655").setscale(2, bigdecimal.round_half_up);

system.out.println("mdata=" + mdata);

原帖位址:

http://blog.csdn.net/ahwr24/article/details/7048724

http://blog.csdn.net/zb48857441/article/details/6180958