Java大数处理类:BigInteger类和BigDecimal类

    当我们要处理非常大的数据时,平常用的数据类型已不足以表示,在Java中有两个类BigInteger和BigDecimal分别表示大整数类和大浮点数类,这两个类在理论上只要计算机内存足够大就能够表示无线大的数。它们都在java.math.*包中,我们可以在API文档中进行查看: 

Java API 1.6 中文在线帮助文档 http://www.yq1012.com/api/

 

实例:

 1 import java.math.BigDecimal;
 2 import java.math.BigInteger;
 3 
 4 /**
 5  * 测试大数
 6  */
 7 public class BigNumberDemo {
 8 
 9     /**
10      * 测试 BigInteger大整数类
11      */
12     private static void testBigInteger() {
13         BigInteger bigInt1 = new BigInteger("12345678912345678912345"); // 实例化一个 BigInteger
14         long ln = 1234567899876543210L;
15         BigInteger bigInt2 = BigInteger.valueOf(ln); // 返回其值等于指定long的值的 BigInteger
16         System.out.println("测试BigInteger类:");
17         System.out.println("bigInt1 = " + bigInt1.toString()); // 输出值
18         System.out.println("bigInt2 = " + bigInt2.toString());
19         // 加法运算
20         BigInteger sum = bigInt1.add(bigInt2); // 返回值为(bigInt1+bigInt2)的 BigInteger
21         System.out.println("bigInt1 + bigInt2 = " + sum.toString());
22         // 减法运算
23         sum = bigInt1.subtract(bigInt2); // 返回值为(bigInt1-bigInt2)的 BigInteger
24         System.out.println("bigInt1 - bigInt2 = " + sum.toString());
25         // 乘法运算
26         sum = bigInt1.multiply(bigInt2); // 返回值为(bigInt1*bigInt2)的 BigInteger
27         System.out.println("bigInt1 * bigInt2 = " + sum.toString());
28         // 除法运算:整数商
29         sum = bigInt1.divide(bigInt2); // 返回值为(bigInt1/bigInt2)整数结果的 BigInteger
30         System.out.println("bigInt1 / bigInt2 = " + sum.toString());
31         // 除法运算:商+余数
32         BigInteger[] sums = bigInt1.divideAndRemainder(bigInt2); // 返回值为(bigInt1/bigInt2)整数结果的 BigInteger
33         System.out.println("bigInt1 / bigInt2 = " + sums[0].toString()
34                 + "\t余数:bigInt1 % bigInt2 = " + sums[1].toString());
35         // 取余数
36         sum = bigInt1.mod(bigInt2);
37         System.out.println("bigInt1 % bigInt2 = " + sum.toString());
38         // 指数
39         sum = bigInt1.pow(2);
40         System.out.println("bigInt1 ^ 2 = " + sum.toString());
41         // 比较两个数是否相等
42         System.out.println("比较两个数是否相等: " + bigInt1.equals(bigInt2));
43         // 比较两个数的大小
44         System.out.println("比较两个数的大小: " + bigInt1.compareTo(bigInt2)
45                 + "  (若小于为-1,等于为0,大于为1)");
46     }
47 
48     /**
49      * 测试 BigDecimal大浮点数类
50      */
51     private static void testBigDecimal() {
52         BigDecimal bigDec1 = new BigDecimal("1234512345678912345678912345.123"); // 实例化一个 BigDecimal
53         Double db = 123456789.123456D;
54         BigDecimal bigDec2 = BigDecimal.valueOf(db); // 返回其值等于指定Double的值的 BigDecimal
55         System.out.println("\n测试BigDecimal类:");
56         System.out.println("bigDec1 = " + bigDec1); // 输出值
57         System.out.println("bigDec2 = " + bigDec2.toString());
58         // 加法运算
59         BigDecimal sum = bigDec1.add(bigDec2); // 返回值为(bigDec1+bigDec2)的 BigDecimal
60         System.out.println("bigDec1 + bigDec2 = " + sum.toString());
61         // 减法运算
62         sum = bigDec1.subtract(bigDec2); // 返回值为(bigDec1-bigDec2)的 BigDecimal
63         System.out.println("bigDec1 - bigDec2 = " + sum.toString());
64         // 乘法运算
65         sum = bigDec1.multiply(bigDec2); // 返回值为(bigDec1*bigDec2)的 BigDecimal
66         System.out.println("bigDec1 * bigDec2 = " + sum.toString());
67         // 除法运算:整数商
68         sum = bigDec1.divideToIntegralValue(bigDec2); // 返回值为(bigDec1/bigDec2)整数结果的 BigDecimal
69         System.out.println("bigDec1 / bigDec2 = " + sum.toString());
70         // 除法运算:商+余数
71         BigDecimal[] sums = bigDec1.divideAndRemainder(bigDec2); // 返回值为(bigDec1/bigDec2)整数结果的 BigDecimal
72         System.out.println("bigDec1 / bigDec2 = " + sums[0].toString()
73                 + "\t余数:bigDec1 % bigDec2 = " + sums[1].toString());
74         // 取余数
75         sum = bigDec1.remainder(bigDec2);
76         System.out.println("bigDec1 % bigDec2 = " + sum.toString());
77         // 指数
78         sum = bigDec1.pow(2);
79         System.out.println("bigDec1 ^ 2 = " + sum.toString());
80         // 比较两个数是否相等
81         System.out.println("比较两个数是否相等: " + bigDec1.equals(bigDec2));
82         // 比较两个数的大小
83         System.out.println("比较两个数的大小: " + bigDec1.compareTo(bigDec2)
84                 + "  (若小于为-1,等于为0,大于为1)");// 末位数据精度
85         System.out.println("bigDec1的末位数据精度:  " + bigDec1.ulp());
86     }
87 
88     public static void main(String[] args) {
89         testBigInteger();
90         testBigDecimal();
91     }
92 
93 }

 

posted @ 2016-04-19 23:18  落枫飘飘  阅读(2523)  评论(0编辑  收藏  举报