天天看点

Java BigDecimal的方法介绍

目录

    • BigDecimal的方法介绍
      • valueOf
      • add
      • subtract
      • multiply
      • devide
      • divideToIntegralValue
      • remainder
      • divideAndRemainder
      • sqrt
      • pow
      • abs
      • negate
      • plus
      • signum
      • scale
      • precision
      • unscaledValue
      • round
      • setScale
      • movePointLeft
      • movePointRight
      • scaleByPowerOfTen
      • stripTrailingZeros
      • compareTo
      • equals
      • min
      • max
      • hashCode
      • toString
      • toEngineeringString
      • toPlainString
      • toBigInteger longValue intValue floatValue doubleValue
      • toBigIntegerExact longValueExact intValueExact shortValueExact byteValueExact
      • ulp

BigDecimal的方法介绍

本文使用的是jdk11的版本

valueOf

参数要求:

public static BigDecimal valueOf​(long unscaledVal, int scale)

public static BigDecimal valueOf​(long val)

public static BigDecimal valueOf​(double val)

方法作用:

如果是一个long类型或一个double类型的参数,通过这个方法可以将其转化位一个BigDecimal的类型。

如果输入了一个long类型,又输入了一个int类型的参数a,得到的结果是这个long类型数乘以10的负a次方之后用科学计数法计数的结果。

代码示例:

BigDecimal bdtest1 = BigDecimal.valueOf(8.25);
        BigDecimal bdtest2 = BigDecimal.valueOf(500L);
        BigDecimal bdtest3 = BigDecimal.valueOf(50L,3);
        BigDecimal bdtest4 = BigDecimal.valueOf(5L,5);

        System.out.println("bdtest1 = " + bdtest1);
        System.out.println("bdtest2 = " + bdtest2);
        System.out.println("bdtest3 = " + bdtest3);
        System.out.println("bdtest4 = " + bdtest4);
           

代码结果:

Java BigDecimal的方法介绍

add

参数要求:

public BigDecimal add​(BigDecimal augend)

public BigDecimal add​(BigDecimal augend, MathContext mc)

方法作用:

两个BigDecimal类型的数相加,或者以某种精度要求相加

代码示例:

BigDecimal bdTest1 = new BigDecimal("10000");
        BigDecimal bdTest2 = new BigDecimal(500.005);
        BigDecimal bdTest3 = new BigDecimal("500.005");

        BigDecimal addTest1 = bdtest1.add(bdTest2);
        BigDecimal addTest2 = bdtest1.add(bdTest3);
        BigDecimal addTest3 = bdtest1.add(bdTest3,new MathContext(7));

        System.out.println("addtest1 = " + addTest1);
        System.out.println("addtest2 = " + addTest2);
        System.out.println("addtest3 = " + addTest3);
           

代码结果图示:

Java BigDecimal的方法介绍

还是可以看出double的值是很不准确的…

subtract

参数要求:

public BigDecimal subtract​(BigDecimal subtrahend)

public BigDecimal subtract​(BigDecimal subtrahend, MathContext mc)

方法作用:

让两个BigDecimal的值相减,如果是A.subtract(B),则结果是A-B。如果加入MathContext,那么会控制结果的精度。

代码示例:

BigDecimal bdTest1 = new BigDecimal("50");
        BigDecimal bdTest2 = new BigDecimal(47.965);
        BigDecimal bdTest3 = new BigDecimal("47.965");

        BigDecimal test1 = bdTest1.subtract(bdTest2);
        BigDecimal test2 = bdTest1.subtract(bdTest3);
        BigDecimal test3 = bdTest1.subtract(bdTest3,new MathContext(3));

        System.out.println("test1 = " + test1);
        System.out.println("test2 = " + test2);
        System.out.println("test3 = " + test3);
           

代码结果图示:

Java BigDecimal的方法介绍

multiply

参数要求:

public BigDecimal multiply​(BigDecimal multiplicand)

public BigDecimal multiply​(BigDecimal multiplicand, MathContext mc)

方法作用:

获得两个BigDecimal类型的数相乘的结果,两个参数的话第二个参数是对结果的精度以及四舍五入进行规定。

代码示例:

BigDecimal bdTest1 = new BigDecimal("5");
        BigDecimal bdTest2 = new BigDecimal(4.55);
        BigDecimal bdTest3 = new BigDecimal("4.55");

        BigDecimal test1 = bdTest1.multiply(bdTest2);
        BigDecimal test2 = bdTest1.multiply(bdTest3);
        BigDecimal test3 = bdTest1.multiply(bdTest3,new MathContext(3));

        System.out.println("test1 = " + test1);
        System.out.println("test2 = " + test2);
        System.out.println("test3 = " + test3);

           

代码结果图示:

Java BigDecimal的方法介绍

可以看出来就算使用BigDecimal类型进行操作,但是输入的参数类型如果是double那么最终结果也可能会出现大问题。

devide

参数要求:

1.public BigDecimal divide​(BigDecimal divisor, int scale, RoundingMode roundingMode)

2.public BigDecimal divide​(BigDecimal divisor, RoundingMode roundingMode)

3.public BigDecimal divide​(BigDecimal divisor)

4.public BigDecimal divide​(BigDecimal divisor, MathContext mc)

方法作用:

4个方法构造分别是:

1.规定四舍五入标准,给定小数点后的位数,得到this/divide

2.规定四舍五入标准,得到this/divide

3.得到this/divide

4.通过MathContext规定四舍五入标准以及精度,得到this/divide

代码示例:

BigDecimal bdTest1 = new BigDecimal("50");
        BigDecimal bdTest2 = new BigDecimal("3");

        //第一种形式
        BigDecimal test1 = bdTest1.divide(bdTest2,5,RoundingMode.UP);
        //第二种形式
        BigDecimal test2 = bdTest1.divide(bdTest2,RoundingMode.UP);
        //第三种形式
        BigDecimal test3 = bdTest1.divide(new BigDecimal(25));
        //第四种形式
        BigDecimal test4 = bdTest1.divide(bdTest2,new MathContext(4));

        System.out.println("test1 = " + test1);
        System.out.println("test2 = " + test2);
        System.out.println("test3 = " + test3);
        System.out.println("test4 = " + test4);
           

代码结果图示:

Java BigDecimal的方法介绍

这里我们可以看到第三个方法我改变了数值,因为这个方法使用其他方法的数据时出现了错误,于是我想着对这个错误研究一下 下面的是报错提示

错误时的代码:

BigDecimal bdTest1 = new BigDecimal("50");
        BigDecimal bdTest2 = new BigDecimal("3");

        //第一种形式
        BigDecimal test1 = bdTest1.divide(bdTest2,5,RoundingMode.UP);
        //第二种形式
        BigDecimal test2 = bdTest1.divide(bdTest2,RoundingMode.UP);
        //第三种形式
        BigDecimal test3 = bdTest1.divide(bdTest2);//167行
        //第四种形式
        BigDecimal test4 = bdTest1.divide(bdTest2,new MathContext(4));

        System.out.println("test1 = " + test1);
        System.out.println("test2 = " + test2);
        System.out.println("test3 = " + test3);
        System.out.println("test4 = " + test4);
           

错误图示:

Java BigDecimal的方法介绍

根据源码的阅读,我发现他一开始判断了除数与被除数是否为0之外,还判断结果是否为一个无限循环的小数,如果无限循环就会报上面的错误。

源码:

public BigDecimal divide(BigDecimal divisor) {
        /*
         * Handle zero cases first.
         */
        if (divisor.signum() == 0) {   // x/0
            if (this.signum() == 0)    // 0/0
                throw new ArithmeticException("Division undefined");  // NaN
            throw new ArithmeticException("Division by zero");
        }

        // Calculate preferred scale
        int preferredScale = saturateLong((long) this.scale - divisor.scale);

        if (this.signum() == 0) // 0/y
            return zeroValueOf(preferredScale);
        else {
            /*
             * If the quotient this/divisor has a terminating decimal
             * expansion, the expansion can have no more than
             * (a.precision() + ceil(10*b.precision)/3) digits.
             * Therefore, create a MathContext object with this
             * precision and do a divide with the UNNECESSARY rounding
             * mode.
             */
            MathContext mc = new MathContext( (int)Math.min(this.precision() +
                                                            (long)Math.ceil(10.0*divisor.precision()/3.0),
                                                            Integer.MAX_VALUE),
                                              RoundingMode.UNNECESSARY);
            BigDecimal quotient;
            try {
                quotient = this.divide(divisor, mc);
            } catch (ArithmeticException e) {
                throw new ArithmeticException("Non-terminating decimal expansion; " +
                                              "no exact representable decimal result.");
            }

            int quotientScale = quotient.scale();

            // divide(BigDecimal, mc) tries to adjust the quotient to
            // the desired one by removing trailing zeros; since the
            // exact divide method does not have an explicit digit
            // limit, we can add zeros too.
            if (preferredScale > quotientScale)
                return quotient.setScale(preferredScale, ROUND_UNNECESSARY);

            return quotient;
        }
    }
           

divideToIntegralValue

参数要求:

public BigDecimal divideToIntegralValue​(BigDecimal divisor)

public BigDecimal divideToIntegralValue​(BigDecimal divisor, MathContext mc)

方法作用:

返回this/divisor的整数值

代码示例:

BigDecimal bdTest1 = new BigDecimal("7000");
        BigDecimal bdTest2 = new BigDecimal("7");

        BigDecimal test1 = bdTest1.divideToIntegralValue(bdTest2);
        BigDecimal test2 = bdTest1.divideToIntegralValue(bdTest2,new MathContext(2));

        System.out.println("test1 = " + test1);
        System.out.println("test2 = " + test2);

           

代码结果图示:

Java BigDecimal的方法介绍

remainder

参数要求:

public BigDecimal remainder​(BigDecimal divisor)

public BigDecimal remainder​(BigDecimal divisor, MathContext mc)

方法作用:

取模运算,结果为this%divisor,有些时候结果为负数

代码示例:

BigDecimal bdTest1 = new BigDecimal("50");
        BigDecimal bdTest2 = new BigDecimal("40");
        BigDecimal bdTest3 = new BigDecimal("-50");
        BigDecimal bdTest4 = new BigDecimal("-40");

        BigDecimal test1 = bdTest1.remainder(bdTest2);
        BigDecimal test2 = bdTest1.remainder(bdTest4);
        BigDecimal test3 = bdTest3.remainder(bdTest2);
        BigDecimal test4 = bdTest3.remainder(bdTest4);
        BigDecimal test5 = bdTest1.remainder(bdTest2,new MathContext(1));

        System.out.println("test1 = " + test1);
        System.out.println("test2 = " + test2);
        System.out.println("test3 = " + test3);
        System.out.println("test4 = " + test4);
        System.out.println("test5 = " + test5);
           

代码结果图示:

Java BigDecimal的方法介绍

divideAndRemainder

参数要求:

public BigDecimal[] divideAndRemainder​(BigDecimal divisor)

public BigDecimal[] divideAndRemainder​(BigDecimal divisor, MathContext mc)

方法作用:

返回一个BigDecimal的两位数组,第一个数存储整数的除结果,第二个数存储模的值

代码示例:

BigDecimal bdTest1 = new BigDecimal("50");
        BigDecimal bdTest2 = new BigDecimal("40");

        BigDecimal[] test = bdTest1.divideAndRemainder(bdTest2);
        BigDecimal[] test2 = bdTest1.divideAndRemainder(bdTest2,new MathContext(1));


        for (BigDecimal b:test) {
            System.out.println(b);
        }

        for (BigDecimal b:test2) {
            System.out.println(b);
        }
           

代码结果图示:

Java BigDecimal的方法介绍

sqrt

参数要求:

public BigDecimal sqrt​(MathContext mc)

方法作用:

根据精度以及四舍五入的设置获得BigDecimal的开方

代码示例:

BigDecimal bdTest1 = new BigDecimal("225");

        BigDecimal test = bdTest1.sqrt(new MathContext(2));
        BigDecimal test1 = bdTest1.sqrt(new MathContext(1));

        System.out.println("test = " + test);
        System.out.println("test1 = " + test1);
           

代码结果图示:

Java BigDecimal的方法介绍

pow

参数要求:

public BigDecimal pow​(int n)

public BigDecimal pow​(int n, MathContext mc)

方法作用:

计算BigDecimal的n次方

代码示例:

BigDecimal bdTest1 = new BigDecimal("2");
        BigDecimal test = bdTest1.pow(2);
        BigDecimal test1 = bdTest1.pow(10);
        BigDecimal test2 = bdTest1.pow(10,new MathContext(3));
        System.out.println("test = " + test);
        System.out.println("test1 = " + test1);
        System.out.println("test2 = " + test2);

           

代码结果图示:

Java BigDecimal的方法介绍

abs

参数要求:

public BigDecimal abs()

public BigDecimal abs​(MathContext mc)

方法作用:

获得BigDecimal类型值的绝对值

代码示例:

BigDecimal bdTest1 = new BigDecimal("2.555");
        BigDecimal bdTest2 = new BigDecimal("-2");

        System.out.println(bdTest1.abs());
        System.out.println(bdTest2.abs());
        System.out.println(bdTest1.abs(new MathContext(3)));
           

代码结果图示:

Java BigDecimal的方法介绍

negate

参数要求:

public BigDecimal negate()

public BigDecimal negate​(MathContext mc)

方法作用:

为BigDecimal类型值添加负号

代码示例:

BigDecimal bdTest1 = new BigDecimal("2.555");
        BigDecimal bdTest2 = new BigDecimal("-2");

        System.out.println(bdTest1.negate());
        System.out.println(bdTest2.negate());
        System.out.println(bdTest1.negate(new MathContext(3)));
           

代码结果图示:

Java BigDecimal的方法介绍

plus

参数要求:

public BigDecimal plus()

public BigDecimal plus​(MathContext mc)

方法作用:

返回自己 源码如下:

public BigDecimal plus() {
        return this;
    }
           

代码示例:

BigDecimal bdTest1 = new BigDecimal("2.555");
        BigDecimal bdTest2 = new BigDecimal("-2");

        System.out.println(bdTest1.plus());
        System.out.println(bdTest2.plus());
        System.out.println(bdTest1.plus(new MathContext(3)));
           

代码结果图示:

Java BigDecimal的方法介绍

signum

参数要求:

public int signum()

方法作用:

根据数的正负返回1,-1,0

代码示例:

BigDecimal bdTest1 = new BigDecimal("200.555");
        BigDecimal bdTest2 = new BigDecimal("-2");
        BigDecimal bdTest3 = new BigDecimal("0");

        System.out.println(bdTest1.signum());
        System.out.println(bdTest2.signum());
        System.out.println(bdTest3.signum());
           

代码结果图示:

Java BigDecimal的方法介绍

scale

参数要求:

public int scale()

方法作用:

返回BigDecimal小数点后有几位数。

代码示例:

BigDecimal bdTest1 = new BigDecimal("200.555");
        BigDecimal bdTest2 = new BigDecimal("-2.5");
        BigDecimal bdTest3 = new BigDecimal("500");

        System.out.println(bdTest1.scale());
        System.out.println(bdTest2.scale());
        System.out.println(bdTest3.scale());
           

代码结果图示:

Java BigDecimal的方法介绍

precision

参数要求:

public int precision()

方法作用:

返回BigDecimal的精度

代码示例:

BigDecimal bdTest1 = new BigDecimal("200.555");
        BigDecimal bdTest2 = new BigDecimal("-2.5");
        BigDecimal bdTest3 = new BigDecimal("500");

        System.out.println(bdTest1.precision());
        System.out.println(bdTest2.precision());
        System.out.println(bdTest3.precision());
           

代码结果图示:

Java BigDecimal的方法介绍

unscaledValue

参数要求:

public BigInteger unscaledValue()

方法作用:

返回没有小数点的BigDecimal值

代码示例:

BigDecimal bdTest1 = new BigDecimal("200.555");
        BigDecimal bdTest2 = new BigDecimal("-2.5");
        BigDecimal bdTest3 = new BigDecimal("500");

        System.out.println(bdTest1.unscaledValue());
        System.out.println(bdTest2.unscaledValue());
        System.out.println(bdTest3.unscaledValue());
           

代码结果图示:

Java BigDecimal的方法介绍

round

参数要求:

public BigDecimal round​(MathContext mc)

方法作用:

根据MathContext四舍五入

代码示例:

BigDecimal bdTest1 = new BigDecimal("200.555");
        BigDecimal bdTest2 = new BigDecimal("-2.5");
        BigDecimal bdTest3 = new BigDecimal("500");

        System.out.println(bdTest1.round(new MathContext(3)));
        System.out.println(bdTest2.round(new MathContext(2)));
        System.out.println(bdTest3.round(new MathContext(1)));
           

代码结果图示:

Java BigDecimal的方法介绍

setScale

参数要求:

public BigDecimal setScale​(int newScale, RoundingMode roundingMode)

public BigDecimal setScale​(int newScale)

方法作用:

为BigDecimal设定新的小数点后的位数

代码示例:

BigDecimal bdTest1 = new BigDecimal("200.555");
        BigDecimal bdTest2 = new BigDecimal("-2.5");
        BigDecimal bdTest3 = new BigDecimal("500");

        System.out.println(bdTest1.setScale(2,RoundingMode.FLOOR));
        System.out.println(bdTest2.setScale(2,RoundingMode.UP));
        System.out.println(bdTest3.setScale(2));
           

代码结果图示:

Java BigDecimal的方法介绍

注意不写RoundingMode的形式默认是UNNECESSARY模式,如果精度不对应会报错。

movePointLeft

参数要求:

public BigDecimal movePointLeft​(int n)

方法作用:

让BigDecimal数字的小数点向左移动

代码示例:

BigDecimal bdTest1 = new BigDecimal("200.555");
        BigDecimal bdTest2 = new BigDecimal("-2.5");
        BigDecimal bdTest3 = new BigDecimal("500");

        System.out.println(bdTest1.movePointLeft(2));
        System.out.println(bdTest2.movePointLeft(2));
        System.out.println(bdTest3.movePointLeft(2));
           

代码结果图示:

Java BigDecimal的方法介绍

movePointRight

参数要求:

public BigDecimal movePointRight​(int n)

方法作用:

让BigDecimal数字的小数点向右移

代码示例:

BigDecimal bdTest1 = new BigDecimal("200.555");
        BigDecimal bdTest2 = new BigDecimal("-2.5");
        BigDecimal bdTest3 = new BigDecimal("500");

        System.out.println(bdTest1.movePointRight(2));
        System.out.println(bdTest2.movePointRight(2));
        System.out.println(bdTest3.movePointRight(2));
           

代码结果图示:

Java BigDecimal的方法介绍

scaleByPowerOfTen

参数要求:

public BigDecimal scaleByPowerOfTen​(int n)

方法作用:

为BigDecimal乘10的n次方

代码示例:

BigDecimal bdTest1 = new BigDecimal("200.555");
        BigDecimal bdTest2 = new BigDecimal("-2.5");
        BigDecimal bdTest3 = new BigDecimal("500");

        System.out.println(bdTest1.scaleByPowerOfTen(2));
        System.out.println(bdTest2.scaleByPowerOfTen(2));
        System.out.println(bdTest3.scaleByPowerOfTen(2));
           

代码结果图示:

Java BigDecimal的方法介绍

stripTrailingZeros

参数要求:

public BigDecimal stripTrailingZeros()

方法作用:

将数后面没用的0去掉

代码示例:

BigDecimal bdTest1 = new BigDecimal("200.55500");
        BigDecimal bdTest2 = new BigDecimal("-2.500");
        BigDecimal bdTest3 = new BigDecimal("500.00");

        System.out.println(bdTest1.stripTrailingZeros());
        System.out.println(bdTest2.stripTrailingZeros());
        System.out.println(bdTest3.stripTrailingZeros());
           

代码结果图示:

Java BigDecimal的方法介绍

compareTo

参数要求:

public int compareTo​(BigDecimal val)

方法作用:

比较大小 大于为1 等于为0 小于为-1

代码示例:

BigDecimal bdTest1 = new BigDecimal("200");
        BigDecimal bdTest2 = new BigDecimal("2");
        BigDecimal bdTest3 = new BigDecimal("500");

        System.out.println(bdTest1.compareTo(bdTest1));
        System.out.println(bdTest1.compareTo(bdTest2));
        System.out.println(bdTest1.compareTo(bdTest3));
           

代码结果图示:

Java BigDecimal的方法介绍

equals

参数要求:

public boolean equals​(Object x)

方法作用:

判断两个值是否相等,与compareTo不同

代码示例:

BigDecimal bdTest1 = new BigDecimal("200");
        BigDecimal bdTest2 = new BigDecimal("2");
        BigDecimal bdTest3 = new BigDecimal("2.00");

        System.out.println(bdTest1.equals(bdTest1));
        System.out.println(bdTest1.equals(bdTest2));
        System.out.println(bdTest1.equals(bdTest3));
           

代码结果图示:

Java BigDecimal的方法介绍

min

参数要求:

public BigDecimal min​(BigDecimal val)

方法作用:

返回两个值中更小的那一个

代码示例:

BigDecimal bdTest1 = new BigDecimal("200");
        BigDecimal bdTest2 = new BigDecimal("5");
        BigDecimal bdTest3 = new BigDecimal("2.00");

        System.out.println(bdTest1.min(bdTest1));
        System.out.println(bdTest1.min(bdTest2));
        System.out.println(bdTest1.min(bdTest3));
           

代码结果图示:

Java BigDecimal的方法介绍

max

参数要求:

public BigDecimal max​(BigDecimal val)

方法作用:

返回两个数中更大的那一个

代码示例:

BigDecimal bdTest1 = new BigDecimal("200");
        BigDecimal bdTest2 = new BigDecimal("5");
        BigDecimal bdTest3 = new BigDecimal("2.00");

        System.out.println(bdTest1.max(bdTest1));
        System.out.println(bdTest1.max(bdTest2));
        System.out.println(bdTest1.max(bdTest3));
           

代码结果图示:

Java BigDecimal的方法介绍

hashCode

参数要求:

public int hashCode()

方法作用:

返回BigDecimal的哈希码

代码示例:

BigDecimal bdTest1 = new BigDecimal("200");
        BigDecimal bdTest2 = new BigDecimal("5");
        BigDecimal bdTest3 = new BigDecimal("2.00");

        System.out.println(bdTest1.hashCode());
        System.out.println(bdTest2.hashCode());
        System.out.println(bdTest3.hashCode());
           

代码结果图示:

Java BigDecimal的方法介绍

toString

参数要求:

public String toString()

方法作用:

返回toString叙述的BigDecimal

代码示例:

BigDecimal bdTest1 = new BigDecimal("200");
        BigDecimal bdTest2 = new BigDecimal("5");
        BigDecimal bdTest3 = new BigDecimal("2.00");

        System.out.println(bdTest1.toString());
        System.out.println(bdTest2.toString());
        System.out.println(bdTest3.toString());
           

代码结果图示:

Java BigDecimal的方法介绍

toEngineeringString

参数要求:

public String toEngineeringString()

方法作用:

如果是科学计数法计数,则返回比精度多一位的计数。

代码示例:

BigDecimal bdTest1 = new BigDecimal("2e7");
        BigDecimal bdTest2 = new BigDecimal("0.5e7");
        BigDecimal bdTest3 = new BigDecimal("2.0E5");

        System.out.println(bdTest1.toEngineeringString());
        System.out.println(bdTest2.toEngineeringString());
        System.out.println(bdTest3.toEngineeringString());
           

代码结果图示:

Java BigDecimal的方法介绍

toPlainString

参数要求:

public String toPlainString()

方法作用:

返回String类型的BigDecimal数值

代码示例:

BigDecimal bdTest1 = new BigDecimal("200");
        BigDecimal bdTest2 = new BigDecimal("5e7");
        BigDecimal bdTest3 = new BigDecimal("-2.905");

        System.out.println(bdTest1.toPlainString());
        System.out.println(bdTest2.toPlainString());
        System.out.println(bdTest3.toPlainString());
           

代码结果图示:

Java BigDecimal的方法介绍

toBigInteger longValue intValue floatValue doubleValue

参数要求:

public BigInteger toBigInteger()

public long longValue()

public int intValue()

public float floatValue()

public double doubleValue()

方法作用:

将BigDecimal转换成对应的数据类型

代码示例:

BigDecimal bdTest1 = new BigDecimal("200");

        BigInteger bi = bdTest1.toBigInteger();
        long testL = bdTest1.longValue();
        int testInt = bdTest1.intValue();
        float testFloat = bdTest1.floatValue();
        double testDouble = bdTest1.doubleValue();

        System.out.println("bi = " + bi);
        System.out.println("testL = " + testL);
        System.out.println("testInt = " + testInt);
        System.out.println("testFloat = " + testFloat);
        System.out.println("testDouble = " + testDouble);
           

代码结果图示:

Java BigDecimal的方法介绍

toBigIntegerExact longValueExact intValueExact shortValueExact byteValueExact

参数要求:

public BigInteger toBigIntegerExact()

public long longValueExact()

public int intValueExact()

public short shortValueExact()

public byte byteValueExact()

方法作用:

跟上面的差不多 但是结果超出类型范围或者损失数据会报错

代码示例:

BigDecimal bdTest1 = new BigDecimal("200");

        BigInteger bi = bdTest1.toBigIntegerExact();
        long testL = bdTest1.longValueExact();
        int testInt = bdTest1.intValueExact();
        short testShort = bdTest1.shortValueExact ();
        byte testByte = bdTest1.byteValueExact();//250行

        System.out.println("bi = " + bi);
        System.out.println("testL = " + testL);
        System.out.println("testInt = " + testInt);
        System.out.println("testShort = " + testShort);
        System.out.println("testByte = " + testByte);

           

代码结果图示:

Java BigDecimal的方法介绍

代码:

BigDecimal bdTest1 = new BigDecimal("200");

        BigInteger bi = bdTest1.toBigIntegerExact();
        long testL = bdTest1.longValueExact();
        int testInt = bdTest1.intValueExact();
        short testShort = bdTest1.shortValueExact ();
        //byte testByte = bdTest1.byteValueExact();//250行

        System.out.println("bi = " + bi);
        System.out.println("testL = " + testL);
        System.out.println("testInt = " + testInt);
        System.out.println("testShort = " + testShort);
           

图示:

Java BigDecimal的方法介绍

ulp

参数要求:

public BigDecimal ulp()

方法作用:

返回对应精度的最小数字

代码示例:

BigDecimal bdTest1 = new BigDecimal("200");
        BigDecimal bdTest2 = new BigDecimal("5e7");
        BigDecimal bdTest3 = new BigDecimal("-2.905");

        System.out.println(bdTest1.ulp());
        System.out.println(bdTest2.ulp());
        System.out.println(bdTest3.ulp());
           

代码结果图示:

Java BigDecimal的方法介绍