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 }