Java中的大胃王--->BigInteger类(大数详解)

BigInteger

概述

1.在java中,有许多处理数字的类,比如说Integer类,但是Integer类却有着一定的局限性。
2. 我们都知道Integer是Int型的包装类,int的表数范围是 -2^31 ~ 2^31-1 。若是我们在显示生活中要描述更大的整数类型时,使用Integer数据类型就无法实现了,所以Java中为我们提供了BigInteger类。
3. BigInteger类型的表数范围较Integer,Long类型的数字范围要大的多。它支持任意精度的整数运算,也就是说在运算中BigInteger类型可以准确地表示任何大小的整数值而不会丢失任何信息。
4. BigInteger提供了所有Java的原始整数运算符和java.lang.Math中所有相关方法的类比。
5. 不可变的任意精度整数。
6. BigInteger的精确计算和庞大容量是因为它的底层是依靠字符串来进行的。
7. BigInteger也被人们亲切的称作大整数,而它的运算就是程序员经常说的大整数运算。

BIgInteger类的常用方法

方法名 功能
BIgInteger(String val) 构造方法,将十进制字符串转换为BIgInteger
BigInteger(byte[] val) 构造方法,将包含二进制补码二进制表达式的字节数组转换为BigInteger
compareTo() 比较运算,==返回0 >返回1 <返回-1
BigInteger.valueOf() 将long型转化为BigInteger,也就是返回一个等于long的BigInteger数
add() 加法
subtract() 减法
multiply() 乘法
divide() 除法
remainder() 取余
abs() 求绝对值
negate() 取反
pow() 求幂
doubleValue() 将BigInteger转化为double型
floatvalue() 将BigInteger转化为float型
toString() 返回一个字符串

代码示例

import java.math.BigInteger;

public class BIgIntegerDemo {
    
    
    public static void main(String[] args) {
    
    
        //构造方法
        String str = "123456789876543212345678765432123456";
        byte [] bytes = {
    
    1,11,41,32,41,};
        System.out.println(new BigInteger(bytes));//4482211881
        System.out.println(new BigInteger(str));//123456789876543212345678765432123456

        //创建BigInteger
        BigInteger a = new BigInteger("123");

        //valueOf 将long型转化为BigInteger,也就是返回一个等于long的BigInteger数
        BigInteger b = BigInteger.valueOf(1234567899876543234l);

        //比较运算 compareTo()  ==返回0  >返回1  <返回-1
        BigInteger data1 = new BigInteger("123456");
        BigInteger data2 = new BigInteger("123455");
        System.out.println(data1.compareTo(data2));//1

        //add() 加法
        System.out.println(data1.add(data2));//246911
        //subtract()  减法
        System.out.println(data1.subtract(data2));//1
        //multiply() 乘法
        System.out.println(data1.multiply(data2));//15241260480
        //divide()  除法
        System.out.println(data1.divide(new BigInteger("10")));//12345
        //remainder() 取余
        System.out.println(data1.remainder(a));//87
        //abs() 求绝对值
        System.out.println(new BigInteger("-1234").abs());//1234
        //negate() 取反
        System.out.println(data1.negate());//-123456
        //pow() 求幂
        System.out.println(data1.pow(3));//1881640295202816
        //doublevalue() 转为double
        System.out.println(data1.doubleValue());//123456.0
        //floatValue() 转为float
        System.out.println(data1.floatValue());//123456.0
        System.out.println(data1.intValue());//123456
        //toString()
        System.out.println(data1.toString());//123456
    }
}

猜你喜欢

转载自blog.csdn.net/Lotus_dong/article/details/109853428