使用 Long.parseLong(fieldValue) 将二进制字符串转成长整型,报异常如下:
1. 异常信息:
java.lang.NumberFormatException: For input string: "01000000000000000000001000001000"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Long.parseLong(Long.java:592)
at java.lang.Long.parseLong(Long.java:631)
2. 报错原因:
利用praseLong转化String类型的数字字符串的时候如果超出了20位,会出现溢出错误。
3. 解决办法, 不报异常,但是转完结果不准确。
使用math类 的BigInterger。
BigInteger value = new BigInteger("00100000000000000000000100000000");
System.out.println("BigInteger: " + value.longValue());
打印结果:❎❎❎错误❎❎❎❎
正确结果:
4.自己写个转化方法吧:
public static void main(String[] args) {
BigDecimal bigDecimal = binaryToString("00100000000000000000000100000000");
System.out.println("BigDecimal: " + bigDecimal.longValue());
}
/**
* 二进制转十进制
*
* @param str
* @return
*/
public static BigDecimal binaryToString(String str) {
BigDecimal bigDecimal = new BigDecimal(0);
char[] chars = str.toCharArray();
for (int i = chars.length; i > 0; i--) {
BigDecimal temp = new BigDecimal(1);
if (chars[i - 1] == '1') {
for (int j = 0; j < str.toCharArray().length - i; j++) {
temp = temp.multiply(new BigDecimal(2));
}
bigDecimal = bigDecimal.add(temp);
}
}
return bigDecimal;
}
打印结果: