JAVA-高精度计算的类:BigInteger和BigDecimal

BigInteger和BigDecimal提供的操作与对基本类型所能执行的操作相似,只不过是以方法调用方式取代运算符方式来实现。等于是用速度换取了精度

BigInteger支持任意精度的整数,在运算中可以准确地表示任何大小的整数值,而不会丢失任何信息。BigDecimal支持任何精度的定点数,可以用它进行精确的货币计算

它们都扩展Number类且实现Comparable接口,可以使用new BigInteger(String)或new BigDecimal(String)来创建实例,使用add(加),subtract(减),multiply(乘),divide(除)和remainder(余)方法完成算数运算,使用compareTo方法比较两个大数字

常用的声明

    public static void main(String[] args) {
        BigInteger a = new BigInteger("123");
        BigInteger b = BigInteger.valueOf(123);
        BigDecimal c = new BigDecimal("123.123");
        BigDecimal d = BigDecimal.valueOf(123.123);
    }

示例

    public static void main(String[] args) {
        BigInteger a = new BigInteger("123");
        BigInteger b = BigInteger.valueOf(123);
        BigDecimal c = new BigDecimal("123.123");
        BigDecimal d = BigDecimal.valueOf(123.123);
        
        BigInteger x = a.add(b);// 加
        BigDecimal p = c.subtract(d);// 减
        BigInteger y = a.multiply(b);// 乘
        BigInteger u = a.divide(b);//除
        BigInteger i = a.remainder(b);//余
        
        int h = a.intValue();//转int
        double e = c.doubleValue();//转double
    }

注意:

BigDecimal divide(String val) 除,因为它有无穷的十进制扩展,如果除不尽则抛出抛出 ArithmeticException异常完整错误如下:

java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.

BigDecimal(double val)构造,用double当参数来构造一个BigDecimal对象。

但是这个构造不太靠谱(unpredictable),你可能以为BigDecimal(0.1)就是妥妥的等于0.1,但是你以为你以为的就是你以为的?还真不是,BigDecimal(0.1)这货实际上等于0.1000000000000000055511151231257827021171583404541015625,因为准确的来说0.1本身不能算是一个double(其实0.1不能代表任何一个定长二进制分数)。

BigDecimal(String val)构造是靠谱的,BigDecimal(“0.1”)就是妥妥的等于0.1,推荐大家用这个构造。

如果你非得用一个double变量来构造一个BigDecimal,没问题,我们贴心的提供了静态方法valueOf(double),这个方法跟new Decimal(Double.toString(double))效果是一样的。


RoundingMode

  • 指定能够丢弃精度的数值运算的舍入行为 。 每个舍入模式指示如何计算舍入结果的最低有效返回数字。 如果返回的数字少于表示确切数值结果所需的数字,则丢弃的数字将被称为丢弃的分数 ,而不管数字对数字值的贡献。 换句话说,被考虑为数值,被丢弃的分数可以具有大于1的绝对值。

RoundingMode.UP:远离零方向舍入的舍入模式

RoundingMode.DOWN:去掉小数部分取整,也就是正数取左边,负数取右边,相当于向原点靠近的方向取整

RoundingMode.CEILING:取右边最近的整数

RoundingMode.FLOOR:取左边最近的正数

RoundingMode.HALF_UP:四舍五入,负数原理同上

RoundingMode.HALF_DOWN:五舍六入,负数先取绝对值再五舍六入再负数

RoundingMode.HALF_EVEN:整数位若是奇数则四舍五入,若是偶数则五舍六入

RoundingMode.UNNECESSARY:用于断言请求的操作具有精确结果的舍入模式,因此不需要舍入

案例

    public static void main(String[] args) {
        BigDecimal a = new BigDecimal("10");
        BigDecimal b = BigDecimal.valueOf(3);
        System.out.println(a.divide(b, 2,RoundingMode.HALF_UP));//结果:3.33
    }

BigInteger和BigDecimal相应JDK


父类

 


实现类

 

  • implements Comparable<BigInteger>, Serializable

BigInteger构造方法
BigInteger(byte[] val)

将包含BigInteger的二进制补码二进制表达式的字节数组转换为BigInteger。

BigInteger(int signum, byte[] magnitude)

将BigInteger的符号大小表示形式转换为BigInteger。

BigInteger(int bitLength, int certainty, Random rnd)

构造一个随机生成的正BigInteger,它可能是素数,具有指定的bitLength。

BigInteger(int numBits, Random rnd)

构造一个随机生成的BigInteger,均匀分布在0到(2 numBits - 1)的范围内。

BigInteger(String val)

将BigInteger的十进制字符串表示形式转换为BigInteger。

BigInteger(String val, int radix)

将指定基数中的BigInteger的String表示形式转换为BigInteger。

BigDecimal构造方法
BigDecimal(BigInteger val)

BigInteger转换成 BigDecimal

BigDecimal(BigInteger unscaledVal, int scale)

将BigInteger的 BigInteger值和 int等级转换为 BigDecimal

BigDecimal(BigInteger unscaledVal, int scale, MathContext mc)

BigInteger未缩放值和 int扩展转换为 BigDecimal ,根据上下文设置进行舍入。

BigDecimal(BigInteger val, MathContext mc)

根据上下文设置将 BigInteger转换为 BigDecimal舍入。

BigDecimal(char[] in)

一个转换的字符数组表示 BigDecimalBigDecimal ,接受字符作为的相同序列 BigDecimal(String)构造。

BigDecimal(char[] in, int offset, int len)

一个转换的字符数组表示 BigDecimalBigDecimal ,接受字符作为的相同序列 BigDecimal(String)构造,同时允许一个子阵列被指定。

BigDecimal(char[] in, int offset, int len, MathContext mc)

一个转换的字符数组表示 BigDecimalBigDecimal ,接受字符作为的相同序列 BigDecimal(String)构造,同时允许指定一个子阵列和用根据上下文设置进行舍入。

BigDecimal(char[] in, MathContext mc)

一个转换的字符数组表示 BigDecimalBigDecimal ,接受相同的字符序列作为 BigDecimal(String)构造与根据上下文设置进行舍入。

BigDecimal(double val)

double转换为 BigDecimal ,这是 double的二进制浮点值的精确十进制表示。

BigDecimal(double val, MathContext mc)

double转换为 BigDecimal ,根据上下文设置进行舍入。

BigDecimal(int val)

intBigDecimal

BigDecimal(int val, MathContext mc)

int转换为 BigDecimal ,根据上下文设置进行舍入。

BigDecimal(long val)

longBigDecimal

BigDecimal(long val, MathContext mc)

long转换为 BigDecimal ,根据上下文设置进行舍入。

BigDecimal(String val)

将BigDecimal的字符串表示 BigDecimal转换为 BigDecimal

BigDecimal(String val, MathContext mc)

一个转换的字符串表示 BigDecimalBigDecimal ,接受相同的字符串作为 BigDecimal(String)构造,利用根据上下文设置进行舍入。

 
BigInteger的JDK
BigIntegerabs()

返回一个BigInteger,它的值是此BigInteger的绝对值。

BigIntegeradd(BigInteger val)

返回值为 (this + val)

BigIntegerand(BigInteger val)

返回值为 (this & val)

BigIntegerandNot(BigInteger val)

返回值为 (this & ~val)

intbitCount()

返回与其符号位不同的BigInteger的二进制补码表示中的位数。

intbitLength()

返回此BigInteger的最小二进制补码表示中的位数, 包括符号位。

bytebyteValueExact()

将此 BigInteger转换为 byte ,检查丢失的信息。

BigIntegerclearBit(int n)

返回一个BigInteger,其值等于此BigInteger,指定的位被清零。

intcompareTo(BigInteger val)

将此BigInteger与指定的BigInteger进行比较。

BigIntegerdivide(BigInteger val)

返回值为 (this / val)

BigInteger[]divideAndRemainder(BigInteger val)

返回两个BigInteger的数组,其中包含 (this / val)后跟 (this % val)

doubledoubleValue()

将此BigInteger转换为 double

booleanequals(Object x)

将此BigInteger与指定的对象进行比较以实现相等。

BigIntegerflipBit(int n)

返回一个BigInteger,其值等于此BigInteger,指定的位被翻转。

floatfloatValue()

将此BigInteger转换为 float

BigIntegergcd(BigInteger val)

返回一个BigInteger,其值是 abs(this)abs(val)

intgetLowestSetBit()

返回此BigInteger中最右(最低位)一位的索引(最右边一位右侧的零位数)。

inthashCode()

返回此BigInteger的哈希码。

intintValue()

将此BigInteger转换为 int

intintValueExact()

将此 BigInteger转换为 int ,检查丢失的信息。

booleanisProbablePrime(int certainty)

返回 true如果这个BigInteger可能是素数, false如果它是绝对复合。

longlongValue()

将此BigInteger转换为 long

longlongValueExact()

将此 BigInteger转换为 long ,检查丢失的信息。

BigIntegermax(BigInteger val)

返回此BigInteger和 val

BigIntegermin(BigInteger val)

返回此BigInteger和 val

BigIntegermod(BigInteger m)

返回值为 (this mod m )。

BigIntegermodInverse(BigInteger m)

返回值为 (this -1 mod m)

BigIntegermodPow(BigInteger exponent, BigInteger m)

返回值为 (thisexponent mod m)的BigInteger 。

BigIntegermultiply(BigInteger val)

返回值为 (this * val)

BigIntegernegate()

返回值为 (-this)

BigIntegernextProbablePrime()

返回大于这个 BigIntegerBigInteger的第一个整数。

BigIntegernot()

返回值为 (~this)

BigIntegeror(BigInteger val)

返回值为 (this | val)

BigIntegerpow(int exponent)

返回值为 (thisexponent)的BigInteger 。

static BigIntegerprobablePrime(int bitLength, Random rnd)

返回一个正的BigInteger,它可能是素数,具有指定的位长度。

BigIntegerremainder(BigInteger val)

返回值为 (this % val)

BigIntegersetBit(int n)

返回一个BigInteger,其值等于具有指定位集合的BigInteger。

BigIntegershiftLeft(int n)

返回值为 (this << n)

BigIntegershiftRight(int n)

返回值为 (this >> n)

shortshortValueExact()

将此 BigInteger转换为 short ,检查丢失的信息。

intsignum()

返回此BigInteger的signum函数。

BigIntegersubtract(BigInteger val)

返回值为 (this - val)

booleantestBit(int n)

返回 true当且仅当指定的位被设置。

byte[]toByteArray()

返回一个包含此BigInteger的二进制补码表示的字节数组。

StringtoString()

返回此BigInteger的十进制字符串表示形式。

StringtoString(int radix)

返回给定基数中BigInteger的String表示形式。

static BigIntegervalueOf(long val)

返回一个BigInteger,其值等于指定的 long

BigIntegerxor(BigInteger val)

返回值为 (this ^ val)

BigDecimal的JDK
BigDecimalabs()

返回一个 BigDecimal ,其值为此 BigDecimal的绝对值,其缩放比例为 this.scale()

BigDecimalabs(MathContext mc)

返回一个 BigDecimal ,其值为此 BigDecimal的绝对值,根据上下文设置进行舍入。

BigDecimaladd(BigDecimal augend)

返回 BigDecimal ,其值是 (this + augend) ,其标为 max(this.scale(), augend.scale())

BigDecimaladd(BigDecimal augend, MathContext mc)

返回 BigDecimal ,其值是 (this + augend) ,根据上下文设置进行舍入。

bytebyteValueExact()

将此 BigDecimal转换为 byte ,检查丢失的信息。

intcompareTo(BigDecimal val)

将此 BigDecimal与指定的BigDecimal进行 BigDecimal

BigDecimaldivide(BigDecimal divisor)

返回BigDecimal ,其值为(this / divisor) ,优先级为(this.scale() - divisor.scale()) ; 如果不能表示确切的商(因为它具有非终止的十进制扩展),则抛出一个ArithmeticException

BigDecimaldivide(BigDecimal divisor, int roundingMode)

返回 BigDecimal ,其值是 (this / divisor) ,其标为 this.scale()

BigDecimaldivide(BigDecimal divisor, int scale, int roundingMode)

返回一个 BigDecimal ,其值为 (this / divisor) ,其比例为指定。

BigDecimaldivide(BigDecimal divisor, int scale, RoundingMode roundingMode)

返回一个 BigDecimal ,其值为 (this / divisor) ,其比例为指定。

BigDecimaldivide(BigDecimal divisor, MathContext mc)

返回 BigDecimal ,其值是 (this / divisor) ,根据上下文设置进行舍入。

BigDecimaldivide(BigDecimal divisor, RoundingMode roundingMode)

返回 BigDecimal ,其值是 (this / divisor) ,其标为 this.scale()

BigDecimal[]divideAndRemainder(BigDecimal divisor)

返回一个两元件 BigDecimal阵列含有的结果 divideToIntegralValue接着的结果 remainder上的两个操作数。

BigDecimal[]divideAndRemainder(BigDecimal divisor, MathContext mc)

返回一个两元件 BigDecimal阵列含有的结果 divideToIntegralValue接着的结果 remainder上与根据上下文设置进行舍入计算出的两个操作数。

BigDecimaldivideToIntegralValue(BigDecimal divisor)

返回一个 BigDecimal ,它的值是 BigDecimal的整数部分 (this / divisor)取整。

BigDecimaldivideToIntegralValue(BigDecimal divisor, MathContext mc)

返回值为 BigDecimal的整数部分的 (this / divisor)

doubledoubleValue()

将此 BigDecimal转换为 double

booleanequals(Object x)

将此 BigDecimal与指定的 Object进行比较以获得相等性。

floatfloatValue()

将此 BigDecimal转换为 float

inthashCode()

返回此 BigDecimal的哈希码。

intintValue()

将此 BigDecimal转换为 int

intintValueExact()

将此 BigDecimal转换为 int ,检查丢失的信息。

longlongValue()

将此 BigDecimal转换为 long

longlongValueExact()

将此 BigDecimal转换为 long ,检查丢失的信息。

BigDecimalmax(BigDecimal val)

返回此 BigDecimalval

BigDecimalmin(BigDecimal val)

返回此 BigDecimalval

BigDecimalmovePointLeft(int n)

返回一个 BigDecimal ,相当于这个小数点,向左移动了 n个地方。

BigDecimalmovePointRight(int n)

返回一个 BigDecimal ,相当于这个小数点移动了 n个地方。

BigDecimalmultiply(BigDecimal multiplicand)

返回 BigDecimal ,其值是 (this × multiplicand),其标为 (this.scale() + multiplicand.scale())

BigDecimalmultiply(BigDecimal multiplicand, MathContext mc)

返回 BigDecimal ,其值是 (this × multiplicand),根据上下文设置进行舍入。

BigDecimalnegate()

返回 BigDecimal ,其值是 (-this) ,其标为 this.scale()

BigDecimalnegate(MathContext mc)

返回 BigDecimal ,其值是 (-this) ,根据上下文设置进行舍入。

BigDecimalplus()

返回 BigDecimal ,其值是 (+this) ,其标为 this.scale()

BigDecimalplus(MathContext mc)

返回 BigDecimal ,其值是 (+this) ,根据上下文设置进行舍入。

BigDecimalpow(int n)

返回 BigDecimal ,其值是 (thisn),该电源,准确计算,使其具有无限精度。

BigDecimalpow(int n, MathContext mc)

返回 BigDecimal ,其值是 (thisn)。

intprecision()

返回此 BigDecimalBigDecimal

BigDecimalremainder(BigDecimal divisor)

返回 BigDecimal ,其值是 (this % divisor)

BigDecimalremainder(BigDecimal divisor, MathContext mc)

返回 BigDecimal ,其值是 (this % divisor) ,根据上下文设置进行舍入。

BigDecimalround(MathContext mc)

返回 BigDecimal根据四舍五入 MathContext设置。

intscale()

返回此 规模 BigDecimal

BigDecimalscaleByPowerOfTen(int n)

返回一个BigDecimal,其数值等于( this * 10 n )。

BigDecimalsetScale(int newScale)

返回一个 BigDecimal ,其大小是指定值,其值在数字上等于此 BigDecimal

BigDecimalsetScale(int newScale, int roundingMode)

返回一个 BigDecimal ,其规模是指定值,其缩放值通过将此 BigDecimal的非标度值乘以10的适当功率来确定,以维持其总体值。

BigDecimalsetScale(int newScale, RoundingMode roundingMode)

返回一个 BigDecimal ,其规模是指定值,其缩放值通过将该 BigDecimal的非标度值乘以10的适当功率来确定,以维持其整体值。

shortshortValueExact()

将此 BigDecimal转换为 short ,检查丢失的信息。

intsignum()

返回这个 BigDecimal的signum函数。

BigDecimalstripTrailingZeros()

返回一个 BigDecimal ,它在数字上等于此值, BigDecimal表示中删除任何尾随的零。

BigDecimalsubtract(BigDecimal subtrahend)

返回 BigDecimal ,其值是 (this - subtrahend) ,其标为 max(this.scale(), subtrahend.scale())

BigDecimalsubtract(BigDecimal subtrahend, MathContext mc)

返回 BigDecimal ,其值是 (this - subtrahend) ,根据上下文设置进行舍入。

BigIntegertoBigInteger()

将此 BigDecimal转换为 BigInteger

BigIntegertoBigIntegerExact()

将此 BigDecimal转换为 BigInteger ,检查丢失的信息。

StringtoEngineeringString()

如果需要指数,则使用工程符号返回此 BigDecimal的字符串表示形式。

StringtoPlainString()

返回没有指数字段的此 BigDecimal的字符串表示形式。

StringtoString()

返回此 BigDecimal的字符串表示,如果需要指数,则使用科学计数法。

BigDecimalulp()

返回此 BigDecimal的最后一个位置的ulp(一个单位)的大小。

BigIntegerunscaledValue()

返回一个 BigInteger ,其值是此 BigDecimal未缩放值

static BigDecimalvalueOf(double val)

转换一个 doubleBigDecimal ,使用 double通过所提供的规范的字符串表示 Double.toString(double)方法。

static BigDecimalvalueOf(long val)

long值转换为 BigDecimal ,比例为零。

static BigDecimalvalueOf(long unscaledVal, int scale)

long值和 int比例转换为 BigDecimal

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值