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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM