當我們要處理非常大的數據時,平常用的數據類型已不足以表示,在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 }
