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一样
本文来自博客园,作者:Yang0710,转载请注明原文链接:https://www.cnblogs.com/cwyYYDS/p/18214019

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号