Java之BigInteger和BigDecimal

2023-12-15 04:15:20

目录

一、BigInteger

1、什么是BigInteger

2、获取BigInteger的对象

3、BigInteger常用成员方法

4、?BigInteger底层存储方式

二、BigDecimal?

?1、什么是BigDecimal

2、使用BigDecimal注意事项:

3、获取BigDecimal的对象

4、BigDecimal常用成员方法

5、BigDecimal底层存储方式


一、BigInteger

1、什么是BigInteger
  1. Java的BigInteger是一个用来表示任意长度的整数的类,可以表示整数的值范围从负无穷到正无穷。
  2. BigInteger类提供了一系列的方法来支持基本的数学运算,如加、减、乘、除和取模等。它还提供了一些工具方法,如比较两个BigInteger对象的大小、转换为byte数组、字符串表示形式等。
  3. BigInteger类的对象是不可变的,即它们一旦被创建就不能被修改。这种特性使得BigInteger类非常适合用来进行精确计算,如金融、稳健算法等领域。
  4. BigInteger进行计算,会产生一个新的BigInteger对象
2、获取BigInteger的对象
public BigInteger(int num , Random rnd)? ?获取随机大整数,范围:【0-2^num - 1】
public BigInteger(String val)? ?获取指定的大整数
public BigInteger(String val , int radix)?获取指定进制的大整数
public static BigInteger valueOf(long val)?静态方法获取BigInteger的对象
// 获取一个随机的大整数(范围是0-2^4,即[0-16),取不到16)
BigInteger bi = new BigInteger(4,new Random());

// 获取一个指定的大整数
// 注:字符串中必须是整数,否则会报错
BigInteger bi = new BigInteger("100");
BigInteger bi = new BigInteger("2165465413216513165");

// 获取一个指定进制的大整数
// 注:字符串中的数字必须和进制吻合
BigInteger bi = new BigInteger("100",2);  // 二进制
BigInteger bi = new BigInteger("100",10); // 十进制

// 静态方法获取BigInteger的对象
// 细节:
//     1、能表示的范围较小,在long的取值范围之内
//     2、在内部对常用的数字(-16~16)进行了优化
//          提前把-16 ~ 16 先创建号BigInteger的对象,如果多次获取不会重新创建新的
BigInteger bi = BigInteger.valueOf(100);
3、BigInteger常用成员方法
public?BigInteger add(BigInteger val)? ? ? ? ?加法
public?BigInteger subtract(BigInteger val)?减法
public?BigInteger multiply(BigInteger val)??????乘法
public?BigInteger divide(BigInteger val)?????????????除法,获取商
public?BigInteger[] divideAndRemainder(BigInteger val)????除法,获取商和余数
public?booleanequals(Object x)?????比较是否相同
public?BigInteger pwo(int exponent)??

次幂

public?BigInteger max/min(BigInteger val)返回较大值/较小值
public?int intValue(BigInteger val)转为int类型整数,超出范围数据有误
4、?BigInteger底层存储方式

????????BigInteger是通过int数组来存储大整数的。每个int元素都代表四个字节,即32位的二进制数。BigInteger中的int数组是按照从低位到高位的顺序存储的,也就是说,int数组的第一个元素存储了大整数的最低位,最后一个元素存储了大整数的最高位。因为这个原因,当我们进行加法、减法、乘法或除法等操作时,需要从低位向高位进行遍历计算。同时,因为int类型的最大值为2^31-1,所以BigInteger能够表示的最大整数位数就是2147483647 / 4 = 536870912位。?

二、BigDecimal?

?1、什么是BigDecimal

????????BigDecimal是Java中的一个类,用于精确处理浮点数运算。它可以处理任意精度的数字,并且提供了一系列的算术运算方法,比如加、减、乘、除等。与常规的浮点类型(如double或float)不同,BigDecimal不会丢失精确度,因此可以用于财务和科学计算等需要高精度计算的场合。

? ? ? ? 作用:

? ? ? ? ? ? ? ? 1、用于小数的精确计算

? ? ? ? ? ? ? ? 2、用来表示很大的小数

2、使用BigDecimal注意事项:
  1. 需要使用构造方法或静态方法valueOf()来创建BigDecimal对象。
  2. 通过调用BigDecimal的方法来进行算术运算,例如:add、subtract、multiply和divide方法。
  3. 使用setScale()方法可以设置BigDecimal对象的小数部分的位数。
  4. 使用compareTo()方法可以比较两个BigDecimal对象的大小。
  5. 使用toString()方法可以将BigDecimal对象转换为字符串。
3、获取BigDecimal的对象
public?BigDecimal(double val)通过传递double类型的小数获取对象(这种方式有可能不精确,不建议使用)
public?BigDecimal(Stringval)通过传递字符串表示的小数来获取对象
public static BigDecimal valueOf(double val)通过静态方法获取对象
// 通过传递double类型的小数获取对象(这种方式有可能不精确,不建议使用)
BigDecimal bd = new BigDecimal(0.01);

// 通过传递字符串表示的小数来获取对象
BigDecimal bd = new BigDecimal("0.01");

// 通过静态方法获取对象
// 注意:数字范围如果超出了double的取值范围,不建议使用这个方法
BigDecimal bd = BigDecimal.valueOf(10);
4、BigDecimal常用成员方法
public BigDecimal add(BigDecimal val)加法
public BigDecimal substract(BigDecimal val)减法
public BigDecimal multiply(BigDecimal val)乘法
public BigDecimal divide(BigDecimal val)除法
public BigDecimal divide(BigDecimal val,精确位数,舍入模式)除法
5、BigDecimal底层存储方式

????????把数据看成字符串,遍历得到里面的每一个字符,把这些字符在ASCII码表上的值,都存储到数组中。

例如:BigDecimal bd = new BigDecimal(0.01);

? ? ? ? ? ?[48 , 46 , 48 , 49]

文章来源:https://blog.csdn.net/lghlhg/article/details/134892427
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。