内容导航:
- 前言
前言
如果我们需要保存的数据非常大,超出了基本数据类型的范围,可以考虑大整数对象或大实数对象。
1、 java.math包
提供用于执行任意精度整数算术(BigInteger)和任意精度十进制算术(BigDecimal)的类。
- BigInteger
BigInteger类似于基本整数类型,只是它提供了任意精度,因此对BigIntegers的操作不会溢出或丢失精度。除了标准的算术操作之外,BigInteger还提供了模块算术、GCD计算、素数测试、素数生成、位操作和其他一些杂项操作。
- BigDecimal
BigDecimal提供适用于货币计算等的任意精度带符号的小数。BigDecimal为用户提供了对舍入行为的完全控制,允许用户从一组全面的8种舍入模式中进行选择。
2、BigInteger类使用的原因
-
8种基本数据类型中,long类型所能表示的整数范围是最大的,但还是有限的。
-
为了解决这些问题,Java中专门提供了用来进行不限制大小的整数计算的类——
java.math.BigInteger
。 -
该类可以对任意大小的整数进行操作,不过在进行计算的时候是通过方法调用进行的,而不是使用算术运算符
3、BigInteger类的构造方法
-
BigInteger(byte[] val)
使用一个byte数组表示来构造一个大整数。 -
BigInteger(int signum, byte[] magnitude)
用一个byte数组magnitude来构造大整数,用signum的-1,0,1来表示负,零,正。 -
BigInteger(int bitLength, int certainty, Random rnd)
构造一个随机产生的,正的,指定长度的,可能是素数的大整数,参数certainty指明要进行多少次素数测试。 -
BigInteger(int numBits, Random rnd)
构造一个随机产生的大整数,范围在0到2^numBits – 1之间。 -
BigInteger(String val)
转换十进制的字符串表达方式为BigInteger这个字符串由一系列的10进制数字和可选择的负号组成符转数字的映射由Character.digit实现这个字符串不能包含任意无关字符(例如:空格) -
BigInteger(String val, int radix)
转换字符串的表达式为指定(radix)进制的大整数这个字符串由一系列的指定进制(radix)的数字组成,任意跟上负号字符转数字的映射由Character.digit实现同样,这个字符串不能包含任意无关字符(例如:空格)
4、BigInteger的四则运算实现方法
-
add(BigInteger val)
返回其值为 (this + val) 的 BigInteger。 -
subtract(BigInteger val)
返回其值为 (this - val) 的 BigInteger。 -
multiply(BigInteger val)
返回其值为 (this * val) 的 BigInteger。 -
divide(BigInteger val)
返回其值为 (this / val) 的 BigInteger。 -
remainder(BigInteger val)
返回其值为 (this % val) 的 BigInteger -
mod(BigInteger m)
返回其值为 (this mod m) 的 BigInteger。
add方法和subtract方法实际上进行的是数组对位相加和相减,这个过程用私有的函数来完成,返回的是为此重新分配空间的结果数组索引值(数组首地址)。然后再用结果数组来构造一个BigInteger作为最后的返回值。
multiply方法使用的是数组相乘,用数组来模拟数字相乘,同样使用一个私有的函数来完成这个过程,为相乘结果数组分配新的空间,最后用结果数组来构造一个BigInteger 作为返回值。
持续更新,欢迎留言提议!
码字很累,多点赞多赞赏!
扫描二维码,关注AT阿宝哥
网友评论