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.