• 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                 + "	余数: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("
    测试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                 + "	余数: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 }
  • 相关阅读:
    【[Offer收割]编程练习赛12 B】一面砖墙
    【[Offer收割]编程练习赛12 A】歌德巴赫猜想
    【codeforces 779E】Bitwise Formula
    Java Web整合开发(85)
    数字
    T2602 最短路径问题 codevs
    P3378 堆【模板】 洛谷
    T1013 求先序排列 codevs
    P1717 钓鱼 洛谷
    P2085 最小函数值 洛谷
  • 原文地址:https://www.cnblogs.com/wuqianling/p/5410218.html
Copyright © 2020-2023  润新知