Java随笔-大数

大数

文章目录


若基本的整形和浮点型精度不够满足需求,那么可以使用java.math包中两个很有用的类:BigInteger和BigDecimal。这两个类可以处理包含任意长度数字序列的数值。BigInteger类实现任意精度的整数运算,BigDecimal实现任意精度的浮点数运算。

一:整形大数

构造方法:

//构造方法一
BigInteger bigInteger = new BigInteger(String str);
//构造方法二
BigInteger bigInteger = BigInteger.valueOf(int x);

常用API:

//实现加法运算
BigInteger add(BigInteger other)
//减法运算
BigInteger subtract(BigInteger other)
//乘法运算
BigInteger multiply(BigInteger other)
//除法运算
BigInteger divide(BigInteger other)
//取模运算
BigInteger mod(BigInteger other)
//与另一个大数相比较,若相等返回0,小返回-1,大返回1
int compareTo(BigInteger other)'
//将基本的整形变成整形大数,返回值等于x的大数
static BigInteger valueOf(long x)

代码示例

 public static void main(String[] args) {
        //整形大数
        //构造方法一
        BigInteger bigInteger = new BigInteger("1234567890234321");
        System.out.println(bigInteger);

        //构造方法二
        BigInteger bigInteger1 = BigInteger.valueOf(100);
        System.out.println(bigInteger1);

        //加:1234567890234321+100+100
        BigInteger sum = bigInteger.add(bigInteger1).add(BigInteger.valueOf(100));
        System.out.println(sum);

        //减1234567890234321-1234567890234321-100 = -100
        BigInteger sub = bigInteger.subtract(bigInteger).subtract(BigInteger.valueOf(100));
        System.out.println(sub);

        //乘
        BigInteger mut = bigInteger.multiply(BigInteger.valueOf(0)).add(bigInteger1);
        System.out.println(mut);

        //除
        BigInteger divide = bigInteger.divide(bigInteger);
        System.out.println(divide);

        //取模
        BigInteger mod = bigInteger.mod(BigInteger.valueOf(2));
        System.out.println(mod);

        //比较
        int i = bigInteger1.compareTo(BigInteger.valueOf(100));
        System.out.println(i);
        int i1 = bigInteger1.compareTo(BigInteger.valueOf(90));
        System.out.println(i1);
        int i2 = bigInteger1.compareTo(BigInteger.valueOf(110));
        System.out.println(i2);
    }

结果:
Java随笔-大数

二:浮点型大数

构造方法:

    BigDecimal bigDecimal = new BigDecimal(int x);
    BigDecimal bigDecimal1 = new BigDecimal(double x);
    BigDecimal bigDecimal2 = new BigDecimal(String str);
    BigDecimal bigDecimal3 = new BigDecimal(BigInteger integer);

常用API:

BigDecimal add(BigDecimal other)
//减法运算
BigDecimal subtract(BigDecimal other)
//乘法运算
BigDecimal multiply(BigDecimal other)
//除法运算
//如果商是个寻仙循环的小数时,程序会抛出异常
BigDecimal divide(BigDecimal other)
//得到一个舍入的结果,如果是四舍五入,那么第二个参数是RoundingMode.HALF_UP
BigDecimal divide(BigDecimal other,RoundingMode mode)
//与另一个大数相比较,若相等返回0,小返回-1,大返回1
int compareTo(BigDecimal other)'
//将基本的整形变成整形大数,返回值等于x的大数
static BigDecimal valueOf(long x)

代码示例:

//构造方式
        BigDecimal bigDecimal = new BigDecimal(1000);
        BigDecimal bigDecimal1 = new BigDecimal(100.1);
        BigDecimal bigDecimal2 = new BigDecimal("10002");
        BigDecimal bigDecimal3 = new BigDecimal(bigInteger1);
        System.out.println(bigDecimal);
        System.out.println(bigDecimal1);
        System.out.println(bigDecimal2);
        System.out.println(bigDecimal3);
        //加
        BigDecimal add = bigDecimal.add(bigDecimal1);
        System.out.println(add);
        //减
        BigDecimal subtract = bigDecimal.subtract(bigDecimal1);
        System.out.println(subtract);
        //乘
        BigDecimal multiply = bigDecimal.multiply(BigDecimal.valueOf(2));
        System.out.println(multiply);

        //除
      //  BigDecimal divide1 = bigDecimal.divide(BigDecimal.valueOf(3));//结果是一个无限循环的小数,这种方法会报错
        BigDecimal divide2 = bigDecimal.divide(BigDecimal.valueOf(3), RoundingMode.UP);//对于无限循环的小数进行四舍五入
//        System.out.println(divide1);
        System.out.println(divide2);

        //比较
        int i3 = bigDecimal.compareTo(BigDecimal.valueOf(1000));
        int i4 = bigDecimal.compareTo(BigDecimal.valueOf(1));
        int i5 = bigDecimal.compareTo(BigDecimal.valueOf(1000000));
        System.out.println(i3);
        System.out.println(i4);
        System.out.println(i5);

结果:
Java随笔-大数

上一篇:Java基础类型之间的转换


下一篇:javaScript通关手册