Java BigInteger类和BigDecimal()类

BigInteger类

  • BigInteger 支持任意精度的整数,可以准确的表达任何大小的整数而不丢失精准度

  • BigInteger 位于 java.math包中

  • BigInteger()括号里必须是字符串

  • BigInteger a = new BigInteger("8888888888888888");
    BigInteger b = new BigInteger("9999999999999999");
    

运算方法add(),subtract(),multiply(),divide()

  • 注意:divide方法里默认无限小数会报错,所以必须使用divide方法规定小数位数

add()

a.add(b);

subtract()减法

a.subtract(b);

multiply()乘法

a.multiply(b);

divide()除法

a.divide(b,3,BigDecimal.ROUND_DOWN);

取三位小数,第三个是取整方式

注:

public int[] plusOne(int[] digits) {
        BigInteger bigInteger =new BigInteger(Arrays.toString(digits));
        BigInteger bigInteger1 = new BigInteger("1");
        bigInteger.add(bigInteger1);
        byte[] bytes = bigInteger.toByteArray();
        Arrays.copyOf(digits,bytes.length);
        for(int i=0;i<bytes.length;i++){
            digits[i]=bytes[i];
        }
        return digits;
    }

这个错误是 NumberFormatException,表示字符串无法转换为有效的数字。在这种情况下,错误发生在 BigInteger 的构造函数 new BigInteger(Arrays.toString(digits)) 中。

根据错误消息中的信息,输入字符串是 "[9]",这意味着 digits 数组中只有一个元素,且该元素的值为 9。然而,Arrays.toString(digits) 方法将数组转换为字符串时,会添加方括号和逗号,导致字符串的格式不符合 BigInteger 的要求

修改后

public int[] plusOne(int[] digits) {
    BigInteger bigInteger = BigInteger.ZERO;
    for (int i = 0; i < digits.length; i++) {
     	bigInteger = 			       bigInteger.multiply(BigInteger.TEN).add(BigInteger.valueOf(digits[i]));
    }
    bigInteger = bigInteger.add(BigInteger.ONE);
    String resultString = bigInteger.toString();
    int[] result = new int[resultString.length()];
    for (int i = 0; i < resultString.length(); i++) {
        result[i] = Character.getNumericValue(resultString.charAt(i));
    }
    return result;
}

BigDecimal()类

  • 由于Double类型运算有精度损失,所以需要使用BigDecimal类来运算,BigDecimal类运算浮点不会有精度损失,但必须传入String类型
  • 运算方法与BigInteger一样
posted @ 2024-05-26 17:25  Yang0710  阅读(4)  评论(0编辑  收藏  举报