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??;
new??;
new?Random?rnd)?。
new?Random?rnd)?。
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(),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.