- 代码中需要对项目编号转换,数值+1。本以为没啥问题,但是遇到位数多了,问题来了。
public class Test {
public static void main(String[] args) {
// 有符号数int的范围是[-2147483648,2147483647]
// 共32位
String num1 = "00001000010000100001";
// 将2进制转为10进制
Integer integer1 = Integer.parseInt(num1)+1;
System.out.println(integer1);
}
}
异常分析如下:
Java中的int类型使用32位来表示,是有符号的,因此Java中int类型所能表示的范围为[-2147483648,2147483647],而num="10000000000000000000000000000000"表示的整数为2147483648,超出了int所能表示的最大整数。故抛出异常。
且源码中只支持到10位。
解决办法:
1.int切换成BigInteger
public static void main(String[] args) {
BigInteger a=new BigInteger("0000100001000010000100001000010000100001000010000100001000010000100001000010000100001000010000100001000010000100001000010000100001000010000100001000010000100001000010000100001000010000100001000010000100001000010000100001000010000100001000010000100001000010000100001000010000100001000010000100001");
BigInteger b=new BigInteger("1");
System.out.println(a.add(b));
}
这种方法没有限制数值。推荐。
2.截取字符串后面的部分进行数字加减
这种方法特殊,只能根据业务场景来做。缺点:一旦截取字符串跳值,则不准确。