一、BigDecimal 的加減乘除
BigDecimal bignum1 = new BigDecimal("10");
BigDecimal bignum2 = new BigDecimal("5");
BigDecimal bignum3 = null;
//加法
bignum3 = bignum1.add(bignum2);
System.out.println("和 是:" + bignum3);
//減法
bignum3 = bignum1.subtract(bignum2);
System.out.println("差 是:" + bignum3);
//乘法
bignum3 = bignum1.multiply(bignum2);
System.out.println("積 是:" + bignum3);
//除法
bignum3 = bignum1.divide(bignum2);
System.out.println("商 是:" + bignum3);
運行結果為:

二、BigDecimal 的比較大小。
BigDecimal num1 = new BigDecimal("0");
BigDecimal num2 = new BigDecimal("1");
BigDecimal num3 = new BigDecimal("2");
BigDecimal num = new BigDecimal("1"); //用做比較的值
System.out.println(num1.compareTo(num)); //小於 時,返回 -1
System.out.println(num2.compareTo(num)); //等於 時,返回 0
System.out.println(num3.compareTo(num)); //大於 時,返回 1
這是輸出結果:

解釋下注釋里面了。
補充:
BigInteger 也可以存放比較大的數, 和 BigDecimal 的區別是 :BigInteger 存放的是大的整數,而BigDecimal 存放大的小數
繼續補充一下,用BigDecimal 寫個for循環。
for (BigDecimal i = new BigDecimal("0"); i.compareTo(new BigDecimal("10")) != 1; i = i.add(new BigDecimal("1"))) {
System.out.print(i + "\t");
}
控制台打印的是從0 到 10 。
三、Java中的BigDecimal使用注意事項
1.BigDecial是immutable的,就像String一樣,它的所有操作都會生成一個新的對象,所以
amount.add( thisAmount );
是錯誤的;而應該是:
amount = amount.add( thisAmount );
2. 不要用equals方法來比較BigDecimal對象,因為它的equals方法會比較scale,如果scale不一樣,它會返回false;
例如:
BigDecimal a = new BigDecimal("2.00");
BigDecimal b = new BigDecimal("2.0");
print(a.equals(b)); // false
所以你應該使用compareTo()和signum()方法
a.compareTo(b); // returns (-1 if a < b), (0 if a == b), (1 if a > b)
a.signum(); // returns (-1 if a < 0), (0 if a == 0), (1 if a > 0)
3. 使用BigDecimal的字符串構造函數,不要使用double參數的構造函數,否則的話會出現你不想要的結果。
例如下面的代碼分別使用double和String的構造函數,然后使用HALF_EVEN的round方法,但是輸出結果不一樣:
System.out.println("==================");
for(int i = 0; i < 10; i ++) {
StringBuffer sb = new StringBuffer();
sb.append("0.");
sb.append(i);
sb.append("5");
BigDecimal bdx = new BigDecimal(sb.toString());
System.out.println(sb + " " +bdx.setScale(1, RoundingMode.HALF_EVEN));
}
System.out.println("==================");
for(int i = 0; i < 10; i ++) {
StringBuffer sb = new StringBuffer();
sb.append("0.");
sb.append(i);
sb.append("5");
BigDecimal bdx = new BigDecimal(Double.valueOf(sb.toString()));
System.out.println(sb + " " +bdx.setScale(1, RoundingMode.HALF_EVEN));
}
輸出是:
==================
0.05 0.0
0.15 0.2
0.25 0.2
0.35 0.4
0.45 0.4
0.55 0.6
0.65 0.6
0.75 0.8
0.85 0.8
0.95 1.0
==================
0.05 0.1
0.15 0.1
0.25 0.2
0.35 0.3
0.45 0.5
0.55 0.6
0.65 0.7
0.75 0.8
0.85 0.8
0.95 0.9