Java之BigInteger和BigDecimal
2023-12-15 04:15:20
目录
一、BigInteger
1、什么是BigInteger
- Java的BigInteger是一个用来表示任意长度的整数的类,可以表示整数的值范围从负无穷到正无穷。
- BigInteger类提供了一系列的方法来支持基本的数学运算,如加、减、乘、除和取模等。它还提供了一些工具方法,如比较两个BigInteger对象的大小、转换为byte数组、字符串表示形式等。
- BigInteger类的对象是不可变的,即它们一旦被创建就不能被修改。这种特性使得BigInteger类非常适合用来进行精确计算,如金融、稳健算法等领域。
- 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注意事项:
- 需要使用构造方法或静态方法valueOf()来创建BigDecimal对象。
- 通过调用BigDecimal的方法来进行算术运算,例如:add、subtract、multiply和divide方法。
- 使用setScale()方法可以设置BigDecimal对象的小数部分的位数。
- 使用compareTo()方法可以比较两个BigDecimal对象的大小。
- 使用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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!