java学习之路:24.大数字运算(BigInteger,BigDecimal)

2020-10-28 11:29:05 浏览数 (3)

1.BigInteger

BigInteger类型的数字要比Integer类型的数字范围大得多,并且支持任意精度的整数,在运算中,BigInteger类型可以准确地表示任何大小的整数值而不会丢失任何信息。 该类中除了基本的加减乘除,还提供了绝对值,相反数,最大公约数以及判断是否为质数。 BigInteger类具有很多构造函数,但最直接的一种方式是参数以字符串形式代表要处理的数字。语法如下:

代码语言:javascript复制
public BigInteger(String val)

其中,val是十进制字符串。 如果想要将10装换为BigInteger类型,可以进行以下操作:

代码语言:javascript复制
BigInteger a=new BigInteger("10");

一旦创建了对象实例,就可以调用BigInteger类中的一些方法进行运算操作,下面列出常用方法:

方法

解释

public BigInteger add(BigInteger val)

加法

public BigInteger subtract(BigInteger val)

减法

public BigInteger multiply(BigInteger val)

乘法

public BigInteger divide(BigInteger val)

除法

public BigInteger remainder(BigInteger val)

取余

public BigInteger[] divideAndRamainder(BigInteger val)

用数组返回余数和商,结果数组中第一个值为商,第二个值为余数

public BigInteger pow(int exponent)

进行取参数的expinent次方操作

public BigInteger negate()

取相反数

public BigInteger shiftLeft(int n)

将数字左移n位,如果n位负数,做右移操作

public BigInteger shiftRight(int n)

将数字右移n位,如果n位负数,做左移操作

public BigInteger and(BigInteger val)

做与操作

public BigInteger or(BigInteger val)

做或操作

public int compareTo(BigInteger val)

做数字比较操作

public boolean equals(Object x)

当参数x是BigInteger类型的数字并且数值相等时,返回true

public BigInteger main(BigInteger val)

返回较小的数值

public BigInteger max(BigInteger val)

返回较大的数值

2.BigDecimal

相对于BigInteger,BigDecimal加入了小数的概念,该类支持任意精度的定点数。 BigDecimal类常用的两个构造方法:

代码语言:javascript复制
public BigDecimal(double val);
//实例化时将双精度类型转换位BigDecimal类型

public BigDecimal(String val);
//实例化时将字符串类型转换为BigDecimal类型

BigDecimal类型的数字可以用来做超大的浮点数的运算:

方法

解释

public BigDeciaml add(BigDeciaml augend)

加法

public BigDeciaml subtract(BigDeciaml augend)

减法

public BigDeciaml multiply(BigDeciaml augend)

乘法

public BigDeciaml divide(BigDeciaml divisor,int scale,int roundingMode)

除法,三个参数分别为输出,商的小数点后的位数,近似处理模式

相对于加减乘除来说,除法是其中最复杂了,很大情况下是除不尽的,所以,针对除法,divide()有多种设置,用于返回商末位小数点的处理,如下表:

模式

含义

BigDeciaml.ROUND_UP

商的最后一位如果大于0,则向前进位,正负数都如此

BigDeciaml.ROUND_DOWN

商的最后一位无论是什么数字都省略

BigDeciaml.ROUND_CEILING

商如果是整数,按照ROUND_UP模式处理,如果是负数,按照ROUND_DOWN模式处理,这种模式的处理都会使近似值大于实际值

BigDeciaml.ROUND_FLOOR

与ROUND_CEILING模式i相反,商如果使正数,按照ROUND_DOWN模式处理,商如果是负数,按照ROUND_UP模式处理,这种模式的处理会使近似值小于实际值

BigDeciaml.ROUND_HALF_DOWN

对商进行四舍五入,如果商最后一位小于等于5,则做舍弃操作,如果最后一位大于5,则做进位操作

BigDeciaml.ROUND_HALF_UP

对商进行四舍五入操作,如果商的最后一位小于5则色情,如果大于等于5,则进位操作

BigDeciaml.ROUND_HALF_EVEN

如果商的倒数第二位为奇数,则按照ROUND_HALF_UP处理,如果是偶数,则按照ROUND_HALF_DOWN处理

若有错误,欢迎指正批评,欢迎讨论。 每文一句:我知道我不是一个很好的记录者,但我比任何人都喜欢回首自己来时的路,我不住的回首,伫足,然而时光仍下我轰轰烈烈的向前奔去。

1 人点赞