1. 程式人生 > 其它 >大數字運算類

大數字運算類

技術標籤:JAVA

  Java中提供了大數字的操作類在java.math包下的BigInteger和BigDecimal。

BigInteger

  針對大整數的處理類。

BigDecimal

  針對大小數的處理類。

建立

  除了String、基本資料封裝類這些特殊的類之外,其他類的建立物件不能使用簡化的初始化方法,只能使用構造方法。(只是對目前來說,後面還會學到利用反射、反序列化、clone()這些建立物件的方法)

 public BigDecimal(double val);
 public BigDecimal(double val);

  這兩種構造方法是有區別的,見下面程式碼:

public static BigDecimal bd1  = new BigDecimal(1.1);
public static BigDecimal bd2  = new BigDecimal("1.1");
System.out.println(bd1);
System.out.println(bd2);
1.100000000000000088817841970012523233890533447265625
1.1

  這是因為double型別儲存的就是一個近似值,有很多虛的小數位,這也是為什麼double型別不能用於精準運算,因此一般我們最常用的是傳遞字串的構造方法。

加減乘除

  BigDecimal是用來做大小數運算的,因此BigDecimal類中實現了加減乘除的方法

public BigDecimal add(BigDecimal augend);//加
public BigDecimal subtract(BigDecimal subtrahend);//減
public BigDecimal multiply(BigDecimal multiplicand);//乘
public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode);//除

  加減乘都很簡單,不用多說。解釋下除法,除法其實有別的構造方法,不過比較推薦使用這個構造方法,其中第一個引數divisor是除數,第二個引數scale是精度,第三個引數roundingMode是處理模式,通常使用BigDecimal.ROUND_HALF_UP,表示四捨五入。

BigDecimal bd1  = new BigDecimal("2.2");
BigDecimal bd2  = new BigDecimal("1.1");
System.out.println(String.format("bd1+bd2: %s", bd1.add(bd2).toString()));
System.out.println(String.format("bd1-bd2: %s", bd1.subtract(bd2).toString()));
System.out.println(String.format("bd1*bd2: %s", bd1.multiply(bd2).toString()));
System.out.println(String.format("bd1/bd2: %s", bd1.divide(bd2, 5, BigDecimal.ROUND_HALF_UP).toString()));
bd1+bd2: 3.3
bd1-bd2: 1.1
bd1*bd2: 2.42
bd1/bd2: 2.00000

型別轉換問題

1、BigDecimal轉換成基本資料型別,例如int,使用intValue()

BigDecimal bd1 = new BigDecimal("2.2");
int i = bd1.intValue();
System.out.println(i);//輸出2

2、BigDecimal轉換成String型別
使用toString()

BigDecimal bd1 = new BigDecimal("2.2");
String s = bd1.toString();
System.out.println(s);//輸出2.2