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