java能處理大數的類有兩個高精度大整數BigInteger 和高精度浮點數BigDecimal,這兩個類位於java.math包內,要使用它們必須在類前面引用該包:import java.math.BigInteger;和import java.math.BigDecimal;或者import java.math.*;
以下從幾個方面對BigInteger和BigDecima做一個簡單的比較:
一.常量
BigInteger:ONE,ZERO,TEN分別代表1,0,10.
其定義類似於:public static final BigInteger ONE = valueOf(1);
BigDecimal:除了以上三個常量外還有8個關於舍入的常量:ROUND_UP,ROUND_DOWN,ROUND_CEILING,ROUND_FLOOR,ROUND_HALF_UP,
ROUND_HALF_DOWN,ROUND_HALF_EVEN,ROUND_UNNECESSARY。詳細舍入模式,請查閱Java API。
二.聲明賦值
BigInteger:BigInteger bi = new BigInteger(byte[] val)
;
new BigInteger(int signum, byte[] magnitude)
;
new BigInteger(int bitLength, int certainty, Random rnd)
。
new BigInteger(int numBits, Random rnd)
。
new BigInteger(String val)
。
new BigInteger(String val, int radix)
;
構造函數僅僅能接受這幾種類型,,比方這樣定義就是錯誤的:BigInteger bi = new BigInteger(100);
或:BigInteger bi = BigInteger.valueOf(100);
數組定義與基本類型類似.
BigDecimal:BigDecimal bd = new BigDecimal(100);或:BigDecimal bd = BigDecimal.valueOf(100);
BigDecimal的構造函數比BigInteger多一些,感覺用起來更方便些
順便說一下,java.util包中的Scanner類實現了nextBigInteger()和nextBigDecimal()方法,能夠用來讀入控制台輸入的BigInteger和BigDecimal.給個樣例:
三.相關函數
add(),subtract(),pow(),abs(),multiply()等等這一類就不介紹了,奇妙的是
probablePrime(int bitLength, Random rnd)
, nextProbablePrime()這一類竟然和素數扯得上關系。
BigDecimal關於格式控制的方法多了幾個,這對處理各種不同格式的輸出是非常實用的。
stripTraillingZeros():把不影響數值大小的0全去掉。
1.50 ->1.5;
1.00->1;
這功能非常實用吧。
大家都知道JAVA的類一般都要帶toString這種方法的。BigDecimal則有toString,toPlainString和toEngineeringString三種表示成字符串的方法。
以下是這三種方法各自的特點:
toString: using scientific notation if an exponent is needed;
toEngineeringString:using engineering notation if an exponent is needed.
toPlainString:without an exponent field.